我在网上搜索到的有关原型(prototype)继承的所有示例和问题都显示了在调用之前将原型(prototype)分配给构造函数,非常类似于以下代码:
Object.beget = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
我的问题是,有没有办法在对象(不是构造函数)原型(prototype)被实例化后更改它,以便我可以访问新的原型(prototype)方法而不直接调用它,或者换句话说,以对象继承其新原型(prototype)方法的方式?
编辑:
我想问题的焦点可能不清楚,我对增强对象的原型(prototype)不感兴趣,我真正想要的是一种分配新原型(prototype)的方法,而不改变与第一个原型(prototype)具有相同原型(prototype)的其他对象.
最佳答案
Is there a way to change an object's prototype after it has been instatiated?
是的,有:Object.setPrototypeOf
(仅限 ES6), Object.getPrototypeOf
的对应项- 它访问对象的真实原型(prototype),而不仅仅是 .prototype
属性。还有.__proto__
getter/setter property (已弃用)具有相同的功能(请参阅 Quick Javascript inheritance: Understanding __proto__ )。
但是,请注意,这样做通常是一个糟糕的主意。不仅因为可能有engines that don't support these ,但它击败了引擎对实例使用的所有花哨的优化:Why is mutating the [[prototype]] of an object bad for performance? .
关于javascript - 创建后分配对象原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449886/