JavaScript原型与原型链
-
原型
JavaScript中创建的每一个函数,解析器都会向函数中添加一个属性prototype。该属性默认指向一个空object实例对象,即原型对象。
原型对象中有一个constructor属性,它指向函数对象。
通过构造函数创建的每个实例对象,解析器都会向对象中添加一个属性__proto__,默认指向的也是原型对象。prototype可称为显示原型属性;__proto__可称为隐式原型属性。
即,实例对象.__proto__===类.prototype
总结:
函数的prototype属性:函数定义时自动添加,默认是一个空Object实例对象。
对象的__proto__属性:实例对象创建时自动添加,默认值为构造函数的prototype属性值。
方法一般定义在原型中,属性一般通过构造函数定义在对象本身上。
查找对象属性时,自动按原型链查找;设置对象属性时,不会查找设置原型链。
-
原型链
原型链:在任意对象和Object.prototype之间,存在着一条以隐式原型属性__proto__进行连接的链,我们称这条链为原型链。
原型链的基本思想就是利用原型让一个引用类型继承另一个引用类型的属性和方法,主要用于查找使用对象的属性/方法。 -
所有通过构造函数创建的对象都是Object的实例;
-
Object函数的显示原型对象是原型链的尽