SyntaxError: property name __proto__ appears more than once in object literal
當一個物件字面量包含多個 __proto__ 欄位時,會發生 JavaScript 異常“屬性名 __proto__ 在物件字面量中出現多次”,該欄位用於設定這個新物件的原型。
訊息
SyntaxError: Duplicate __proto__ fields are not allowed in object literals (V8-based) SyntaxError: property name __proto__ appears more than once in object literal (Firefox) SyntaxError: Attempted to redefine __proto__ property. (Safari)
錯誤型別
SyntaxError
哪裡出錯了?
__proto__ 鍵與其他屬性鍵不同,它在物件字面量中是一種特殊的語法。它用於設定正在建立的物件的原型,並且不允許在一個物件字面量中出現多次。請注意,此限制僅適用於 __proto__ 原型設定器語法:如果它實際上具有建立名為 __proto__ 的屬性的效果,那麼它可以出現多次。有關確切的語法限制,請參閱原型設定器。
值得注意的是,物件字面量中的 __proto__ 鍵是一種特殊語法,並未被棄用,這與Object.prototype.__proto__ 訪問器屬性不同。
示例
無效案例
js
const obj = { __proto__: {}, __proto__: { a: 1 } };
有效情況
js
// Only setting the prototype once
const obj = { __proto__: { a: 1 } };
// These syntaxes all create a property called "__proto__" and can coexist
// They would overwrite each other and the last one is actually used
const __proto__ = null;
const obj2 = {
["__proto__"]: {},
__proto__,
__proto__() {},
get __proto__() {
return 1;
},
};