今天上午创建的对象采用超我碰到一个tweet from Šime Vidas来了,他提出在对象文本使用super
以下可能性:用的Object.create
let A = {
run() {
console.log('A runs');
}
};
let B = {
run() {
super.run();
}
};
Object.setPrototypeOf(B, A);
B.run(); // A runs
这工作,并指派B.__proto__ = A;
,而不是似乎工作在Firefox和Chrome中都是如此。
所以我想我可以做同样的Object.create
:
let A = {
run() {
console.log('A runs');
}
};
let B = Object.create(A);
B.run = function() { super.run() };
不幸的是,这会导致两个Firefox的一个错误:
SyntaxError: use of super property accesses only valid within methods or eval code within methods
和Chrome:
Uncaught SyntaxError: 'super' keyword unexpected here
当我尝试将属性描述符对象传递给的第二个参数时,会发生同样的情况。
从语义上讲,它们看起来都和我一样,所以我不太清楚发生了什么(是因为对象字面量?)。
现在我想知道,这是准确定义的标准行为(spec参考赞赏)吗?是否有一些实现缺少Object.create
,或者对象文字不起作用?
好,对象'B'你的情况是' (好吧,我知道这个词不应该用在JS上下文中)'A'。所以'B.run();'和A.run();'?是一样的。 – Arg0n
检查[此鸣叫](https://twitter.com/awbjs/status/730770661145088000)这意味着超级只能用于简短和定义方法。 –
是的,我问他;) – nils