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