【问题标题】:If a prototype is changed, will this affect current instances?如果原型被更改,这会影响当前实例吗?
【发布时间】:2011-06-23 16:54:46
【问题描述】:

说我有这个:

var _JS = function() {
  this.Constants = {
    True: 1,
    False: 0,
    Nil: null,
    Unknown: void(0),
  };
};

var JS = new _JS();

如果我之后更改它(添加方法,使用_JS.prototype.etc),我可以在JS 上调用这些方法吗?

【问题讨论】:

  • 你没有使用原型。
  • 不,我正在更改函数的原型。 :) 这确实与图书馆无关。
  • 嗯,你不能自己测试一下吗? :)

标签: javascript prototype-programming


【解决方案1】:

是的,原型更改会影响您修改其原型的项目的所有实例。

查看简单原型修改示例:http://jsfiddle.net/JAAulde/56Wdw/1/

【讨论】:

  • +1 这太棒了。 (否则我不能使用JS.Constants :))。等待 10 分钟后将接受。
【解决方案2】:

是的。修改原型会修改所有实例。

一个简单的测试:

var f = function(){}
var g = new f()
f.prototype.trace = function(){alert(1)}
g.trace(); // alerts 1

【讨论】:

    【解决方案3】:

    如果原型被更改,这会影响当前实例吗?

    是的。如果您更改现有对象实例共享的原型,所有这些实例都会更改。

    【讨论】:

      【解决方案4】:

      下面的代码会打印一些东西:

      var ajs = new _JS();
      _JS.prototype.do = function () {console.log('something');}
      ajs.do();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多