为什么ECMAScript标准中没有Object.setPrototypeOf(...)?

时间:2012-07-01 12:19:37

标签: javascript prototype ecmascript-6 w3c

显然使用__proto__属性仍然是操纵原型链的主要方式,即使这不符合标准且IE不支持它。虽然您也可以通过使用new构造函数来构造继承,但与__proto__属性或符合标准的Object.getPrototypeOf函数相比,这似乎是一种不必要的复杂性。

修改

如答案中所述,此方法现在确实存在(ES6标准)。但请注意性能警告:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

2 个答案:

答案 0 :(得分:9)

这是ES6和谐草案的一部分:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

我现在在最新版本的Chrome中使用它。

var proto = {
    foo: 'bar'
};

var object = {};

Object.setPrototypeOf(object, proto);

console.assert(object.foo == 'bar');

答案 1 :(得分:2)

Brendan Eichhere

  

Object.setPrototypeOf不会发生。可写的__proto__是一个   实施的巨大痛苦(必须序列化以循环检查)并创建   各种类型混淆的危险。你可能认为你想要它   低级锐利的乐器。 JS不是那种语言。更高层次   类和混合的表单看起来好多了,不涉及这些   锋利的边缘。