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;
},
};