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

问题描述 投票:0回答:2

显然使用

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

编辑:

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

javascript prototype ecmascript-5
2个回答
10
投票

它是 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');

2
投票

Brendan Eich 在这里说:

Object.setPrototypeOf 不会发生。可写 __proto__ 是 实现起来非常痛苦(必须序列化到循环检查)并且它会创建 各种类型混淆的危险。您可能认为您想要它作为 低级锐器。 JS 不是那种语言。更高级别 类和 mixin 的形式似乎更好,并且不涉及此类 锋利的边缘。

© www.soinside.com 2019 - 2024. All rights reserved.