ノード6.9.1を実行しています。スーパーはメソッド構文では動作しますが、プロパティ構文では機能しないのはなぜですか?
私はこのようなベースオブジェクトを定義します。
const base = {
value : 10,
getFinalValue : function() {
return this.value
}
}
今、私はgetFinalValue
メソッドの修飾子を定義したいです。
> SyntaxError: 'super' keyword unexpected here
ザ・私が試した:
const modifier = Object.create(base)
modifier.getFinalValue = function() {
return super.getFinalValue() + 20
}
しかし、上記のコードは私に次のエラーを与える:
私の最初の試みは、新しいES6 super
キーワードを使用していた
// 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 .:はい、私はES5とES6の構文を混同していることを認識していますが、これは目的に沿ったものです。
ご質問をさらに詳しくお伝えいただくか、仕様を超えたリンクを提供してください。ありがとうございました。 –