举例
//每个构造函数都是Function的实例
var Obj = function(){};
var o = new Obj();
详解
- 真正形成原型链的是每个对象的
_proto_
属性,而不是函数的prototype
属性 -
实例._proto_
指向构造函数的prototype
,构造函数.prototype._proto_
属性指向Object.prototype
是个{}
,{}
的_proto_
属性指向null
-
构造函数._proto_
指Function.prototype
,Function.prototype._proto_
指向Object.prototype
是个{}
,{}
的_proto_
属性指向null
console.log(o.__proto__.__proto__);
//=>{},也就是构造函数.prototype.__proto_
console.log(Function.__proto__.__proto__);
//=> {}
console.log(o.__proto__.__proto__.__proto__ );
//=== null
console.log(Function.prototype.__proto__==Obj.prototype.__proto__);
原型链的问题
- 引用类型值的原型属性会被所有实例共享
- 创建子类型的实例时,不能向父类的构造函数传递参数
参考文章推荐:
图解Javascript原型链