js会顺着__proto__属性一直向上找,直到Object.prototype根对象。js不会顺着prototype属性向上找。- 只有
class和function有prototype。 prototype是给new出来的对象使用的。class A{}这里的A是一个类。function B(){}这里的B也是一个类。const C = {}这里的C是一个对象,不是一个类。- 该文章把有
prototype这个属性的,都称为一个类。 class A{}只是一个function A(){}的语法糖。
测试代码
test.js
node --inspect-brk=9229 test.js 开启调试。
class A {
constructor(key) {
this.key = key;
}
f1() {
console.log("I'm f1");
}
}
function B(key) {
this.key = key;
}
B.prototype = {
f2: function() {
console.log("I'm f2");
},
};
const C = {
key: 'CC',
f3() {
console.log("I'm f3");
},
};
function D() {
console.log("I'm D function");
}
const a1 = new A(10);
const a2 = new A(20);
const b1 = new B(10);
const b2 = new B(20);
const d1 = new D();
console.log('end');
chrome 测试
按 F12 在 console 中查看。
输入 a = {} 和 Object.prototype 观察下。
a.__proto__ === Object.prototype
a.__proto__.constructor === Object
Object.prototype.constructor === Object
Object.prototype.__proto__ === null
Object.__proto__ === Function.prototype
Function.prototype.constructor === Function
Function.prototype.__proto__ === Object.prototype
Function.__proto__ === Function.prototype
参考链接
https://stackoverflow.com/questions/9959727/proto-vs-prototype-in-javascript