画了个对象关系图
function Foo(){} // 构造函数
var f1 = new Foo(); // 实例对象
我发现:
- 子级.proto.constructor === 父级
f1.__proto__.constructor === Foo // true
Foo.__proto__.constructor === Fuction // true
Object.__proto__.constructor === Function //true
- 父级.prototype === 子级.__proto__
Foo.prototype === f1.__proto__ // true
Function.prototype === Foo.__proto__ // true
Object.prototype === f1.__proto__.__proto__ //true
- constructor指向对象,__proto__指向原型父级原型
- 由构造函数初始化的实例没有prototype
- Object是顶级大BOSS
f1.__proto__.__proto__.constructor === Object //true
Foo.__proto__.__proto__.constructor === Object //true
Function.__proto__.__proto__.constructor === Object //true
暂且先这样吧~
经过后来的学习,我倾向于把__proto__
和constructor
看作是一个基因库,__proto__
里装着遗传自祖先的基因,constructor
才是真正属于自己的东西,包含prototype
和__proto__
。
实例对象是构造函数的克隆体,因此它没有真正属于自己的东西,故实例对象没有constructor
,即使你打印出了f1.constuctor
那指向的也是它的父级。