济南做网站公司电话谷歌搜索引擎首页
文章目录
- 图解
- 原型
- 原型链
- 总结
- 有需要的请私信博主,还请麻烦给个关注,博主不定期更新,或许能够有所帮助!!请关注公众号
图解
原型
常被描述为 — 种基于原型的语言–每个对象拥有一个原型对象 当试图访问 一个对象的属性时, 它不仅仅在该对象上搜寻,
还会搜寻该对象的原型, 以及该对象的原型 的原型 ,依次层层向上搜索 , 直到找到一个名字匹配的属性或到达原型链的末尾 准确地说 ,
这些属性和方法定义在。bject的构造器函数 (constructor functions) 之上 的 prototype 属性上
,而非实例对象本身
函数可以有属性。每个函数都有一个特殊的属性叫作原型 prototype
function doSomething(){}console.log( doSomething.prototype );
输出原型对象
{constructor: ƒ doSomething(),__proto__: {constructor: ƒ Object(),hasOwnProperty: ƒ hasOwnProperty(),isPrototypeOf: ƒ isPrototypeOf(),propertyIsEnumerable: ƒ propertyIsEnumerable(),toLocaleString: ƒ toLocaleString(),toString: ƒ toString(),valueOf: ƒ valueOf()
}
原型对象有一个自有属性 constructor , 这个属性指向该函数 , 如下图关系展示
原型链
原型对象也可能拥有原型, 并从中继承方法和属性, — 层 — 层 、以此类推 。这种关系常被称为原型链 (prototype chain)
, 它解释了为何一个对象会拥有定义在其他对象中的属性和方法 在对象实例和它的构造器之间建立-个链接 (它是 proto 属性
是从构造函数 的 prototype 属性派生的) , 之后通过上溯原型链 ,在构造器中找到这些属性和方法
function Person(name) {this.name = name;this.age = 18;this.sayName = function() {console.log(this.name);}
}
//
var person = new Person('person')
总结
下面首先要看几个概念:
proto 作为不同对象之间的桥梁, 用来指向创建它的构造函数的原型对象的
提示:这里可以添加技术名词解释
每个对象的 proto 都是指向它的构造函数的原型对象 prototype 的
person1.__proto__ === Person.prototype
刚刚上面说了 ,所有的构造器都是函数对象 函数对象都是 Function 构造产生的
Object.__proto__ === Function.prototype