显然使用
__proto__
属性仍然是操作原型链的主要方式,尽管这不符合标准并且 IE 也不支持它。尽管您也可以通过使用 new
构造函数来构造继承,但与 __proto__
属性或符合标准的 Object.getPrototypeOf
函数相比,这似乎是不必要的复杂化。
编辑:
正如答案中所述,这种方法现在确实存在(ES6标准)。不过,请注意性能警告:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf
它是 ES6 和谐草案的一部分:
我现在在最新版本的 Chrome 中使用它。
var proto = {
foo: 'bar'
};
var object = {};
Object.setPrototypeOf(object, proto);
console.assert(object.foo == 'bar');
Brendan Eich 在这里说:
Object.setPrototypeOf 不会发生。可写 __proto__ 是 实现起来非常痛苦(必须序列化到循环检查)并且它会创建 各种类型混淆的危险。您可能认为您想要它作为 低级锐器。 JS 不是那种语言。更高级别 类和 mixin 的形式似乎更好,并且不涉及此类 锋利的边缘。