javascript - 如何操作原型(prototype)中的变量?

标签 javascript prototype prototype-programming

我是 Javascript 新手,想知道如何修改原型(prototype)中的公共(public)变量。

function Thing (val)
{
    this.x = val;

    this.addToX = function (valIn)
    {
        this.x += valIn;
    };
}

function ChildThing ()
{
    this.y = 55;
}

ChildThing.prototype = new Thing(10);

var frank = new ChildThing();

console.log("out1: " + frank.x);

frank.addToX(10);

console.log("out2: " + frank.x);

此代码采用原型(prototype) x 中的值为 10 的值,并在 addToX 函数中将其加上 10。新的 x 值存储在顶级对象中,而不是替换原型(prototype)中当前的 x 值。

有没有办法覆盖原型(prototype)中现有的 x 或者我使用了 Javascript 错误?

最佳答案

这要看情况。改变原型(prototype)上的 x 有何意义?通常您不想更改共享属性。但我想可能有一个用例(生成新的 id?)。

至于问题:你可以简单地这样做:

this.addToX = function(valIn) {
    ChildThing.prototype.x += valIn;
};

我再次不建议这样做。

编辑您可以通过在将其设置为原型(prototype)之前定义原型(prototype)来在不引用子级的情况下进行制作,即

var my_proto = new Thing(10);
ChildThing.prototype = my_proto;

然后

this.addToX = function(valIn) {
    my_proto.x += valIn;
};

或者你甚至可以玩 the singleton pattern .

关于javascript - 如何操作原型(prototype)中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148691/

相关文章:

generics - typescript 可以使用使用元素类型参数的方法扩展 Array.prototype 吗?

javascript - 继承 React 组件的正确方式

JavaScript 无法一次接收一行子流

javascript - AngularJS 输入类型数字与字符串模型

javascript - 如何在用户单击音频标签中的播放按钮时显示消息?

javascript - 避免在外部调用原型(prototype)方法时丢失对象实例

Javascript - 在原型(prototype)上放置一个常量

javascript - 如何更改 DOM 对象原型(prototype)中的方法

javascript - JavaScript 中有没有一种方法可以实例化不一定是函数的对象?

javascript - Django 管道和 javascript 依赖项