在 JS 中,如果我使用构造函数创建一个新对象,并访问原型对象,我可以看到原型具有的任何属性。(在代码中会更清楚):
function F() {
this.attr = 42;
}
F.prototype.foo = function() {
return 'life';
}
$> let f = new F();
undefined
$> f
F { attr: 42 }
$> Object.getPrototypeOf(f)
F { foo: [Function] }
在这里一切都很好。
现在,我将使用类语法来创建相同的场景
class C {
constructor() {
this.attr = 42;
}
foo() {
return 'life';
}
}
$> let c = new C()
undefined
$> c
C { attr: 42 }
$> Object.getPrototypeOf(o)
C {}
结果C {}
让我很困惑。我的属性在哪里?foo
它不在c
对象中,但似乎不在我的C
原型中!