SyntaxError: 对象字面量中 __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)
错误类型
哪里出错了?
__proto__
键与其他属性键不同,它是对象字面量中的特殊语法。它用于设置正在创建的对象的原型,并且不允许在对象字面量中出现多次。请注意,此限制仅适用于__proto__
原型setter语法:如果它实际上具有创建名为__proto__
的属性的效果,则它可以出现多次。有关确切的语法限制,请参阅原型setter。
值得注意的是,对象字面量中的__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__() {},
};