9

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

编辑:

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

4

2 回答 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');
于 2014-10-17T19:37:48.733 回答
2

Brendan Eich在这里说:

Object.setPrototypeOf 不会发生。可写的 __proto__ 实现起来非常痛苦(必须序列化以进行循环检查),并且它会产生各种类型混淆的危险。你可能认为你想要它作为一种低级的尖锐乐器。JS 不是那种语言。类和混合的高级形式似乎要好得多,并且不涉及如此尖锐的边缘。

于 2012-07-01T12:23:32.113 回答