看到这两个东西就头疼。。。
▍示例
var a = {
num: 4,
}
var b = function() {
}
console.log('a.__proto_:', a.__proto__, '\n\n');
console.log('a.__proto_.__proto__:', a.__proto__.__proto__, '\n\n');
console.log('a.prototype:', a.prototype, '\n\n');
console.log('b.__proto__:', b.__proto__, '\n\n');
console.log('b.__proto__.__proto__:', b.__proto__.__proto__, '\n\n');
console.log('b.prototype:', b.prototype, '\n\n');
console.log('b.prototype.__proto_:', b.prototype.__proto_, '\n\n');
console.log('Object.__proto__:', Object.__proto__, '\n\n');
console.log('Object.__proto__.__proto__:', Object.__proto__.__proto__, '\n\n');
console.log('Object.prototype:', Object.prototype, '\n\n');
console.log('Object.prototype.__proto__:', Object.prototype.__proto__, '\n\n');
console.log('Function.__proto__:', Function.__proto__, '\n\n');
console.log('Function.__proto__.__proto__:', Function.__proto__.__proto__, '\n\n');
console.log('Function.prototype:', Function.prototype, '\n\n');
console.log('Function.prototype.__proto__:', Function.prototype.__proto__, '\n\n');
效果:
▍结论
- 任何对象有__proto__和prototype属性;
- 非函数对象只有__proto__属性;
- prototype中有__proto__属性。且是Object构造函数创建的;
- 函数对象__proto__指向它的创建者及Function构造函数;
- Function构造函数__proto__指向它自己;
- Object对象的prototype中的__proto__是null;
▍原文