今天上午創建的對象採用超我碰到一個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