super
的可能性:let A = {
run() {
console.log('A runs');
}
};
let B = {
run() {
super.run();
}
};
Object.setPrototypeOf(B, A);
B.run(); // A runs
这很有效,而且在Firefox和Chrome中似乎将
B.__proto__ = A;
赋值给B的原型链也可以起到同样的作用。因此我想我可以使用Object.create
来实现相同的效果:let A = {
run() {
console.log('A runs');
}
};
let B = Object.create(A);
B.run = function() { super.run() };
很不幸,这会导致Firefox和Chrome都出现错误:
并且在尝试将属性描述符对象传递给SyntaxError: use of super property accesses only valid within methods or eval code within methods
Object.create
的第二个参数时也会发生同样的情况。从语义上讲,它们在我的看法中似乎是相等的,所以我不太确定发生了什么(是因为对象文字吗?)。
现在我想知道,这是确切定义的标准行为吗(赞赏规范参考)?
Object.create
是否有一些缺失的实现,或者首先对象文字就不能正常工作?
B
是A
的一个实例(好的,我知道这个词在 JS 上下文中不应该使用)。所以B.run();
和A.run();
是一样的吗? - Arg0n