我正在運行節點6.9.1。爲什麼super使用方法語法,但不使用屬性語法?
我定義了一個基本對象是這樣的:
const base = {
value : 10,
getFinalValue : function() {
return this.value
}
}
現在我想要定義爲getFinalValue
方法的修改。
我第一次嘗試使用新的ES6 super
關鍵字:
const modifier = Object.create(base)
modifier.getFinalValue = function() {
return super.getFinalValue() + 20
}
然而,上面的代碼給我下面的錯誤:
> SyntaxError: 'super' keyword unexpected here
的我想:
// With Object.defineProperties within Object.create
const modifier = Object.create(base, {
getFinalValue : {
value : function() {
return super.getFinalValue() + 20
}
}
})
// And with Object.setPrototypeOf
const modifier = {
getFinalValue : function() {
return super.getFinalValue() + 20
}
}
Object.setPrototypeOf(modifier, base)
結果是一樣的錯誤。
不過,如果我使用新的方法,ES6語法:
const modifier = {
getFinalValue() {
return super.getFinalValue() + 20
}
}
Object.setPrototypeOf(modifier, base)
modifier.getFinalValue() // 30 (yay!)
它工作得很好。
如果我使用Object.getPrototypeOf
而不是super
,它的工作原理使用屬性語法:
const modifier = {
getFinalValue: function() {
return Object.getPrototypeOf(this).getFinalValue.call(this) + 20
}
}
Object.setPrototypeOf(modifier, base)
modifier.getFinalValue() // 30 (Yay!)
有人能向我解釋爲什麼會發生這種情況?
P.S .:是的,我知道我在混合使用ES5和ES6語法,但這是有意的。
請問您是否可以詳細說明您的問題,甚至提供超出規格的鏈接?謝謝。 –