在学习js原型链 的过程中,大家肯定碰到过属性__proto__
和prototype
,下面就举例说明下构造函数、隐式原型(__proto__
)、原型对象(prototype
)、实例的关系:
(感兴趣的小伙伴可以在命令行里敲入以下代码验证。)
function F(name){
this.name = name
}
var f = new F('jack');
// 构造器
F.prototype.constructor === F;
F.__proto__ === Function.prototype;
Function.prototype.__proto__ === Object.prototype;
// 实例
f.__proto__ === F.prototype;
F.prototype.__proto__ === Object.prototype;
Object.prototype.__proto__ === null;
总结:
- 对象都有
__proto__
属性,称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型(prototype); -
Object.prototype.__proto__ === null
是true; - 函数(Function)变量比较特殊,因为函数也是对象,它不仅有
__proto__
属性,还有prototype
属性。 -
prototype
属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指向原构造函数。
网友评论