javascript - 创建后分配对象原型(prototype)

标签 javascript inheritance prototype prototype-programming

我在网上搜索到的有关原型(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/

相关文章:

eval 反序列化后 Javascript 原型(prototype)未定义

javascript - "Failed to execute 'appendChild' on 'Node'”是什么意思?

javascript - 如何使用 Express.js 和 axios 更新 mongoDB 中的值

javascript - 在 React 中使用 this.props.src 导入图像

javascript - Crockford 的伪经典继承示例中关于何时使用原型(prototype)的困惑

java - 余额在 SavingsAccount1 中具有私有(private)访问权限,并且不允许我在FlexibleSavingsAccount1 中访问它

c# - 跨不同(共享)项目和命名空间的继承

javascript - html css 和 js 不工作

javascript - 在 JavaScript 中使用一组函数作为原型(prototype)

javascript原型(prototype)继承覆盖属性