【问题标题】:Do JavaScript class instances clone functions?JavaScript 类实例会克隆函数吗?
【发布时间】:2016-06-01 14:24:46
【问题描述】:

如果我有以下代码:

function myClass(){
    this.type = 1;
    this.ret = function(){
        return this.type;
    }
}

var ins1 = new myClass,
    ins2 = new myClass,
    ins3 = new myClass;

ins2.type = 2;
ins3.type = 3;

console.log(ins1.ret() + ' - ' + ins2.ret() + ' - ' + ins3.ret());

控制台中的输出是

1 - 2 - 3

当代码运行时(console.log() 部分),是运行一种方法ret(),还是运行三种?如果每个实例都创建一个新方法,我该如何避免呢?如果他们都做同样的事情,为什么要三个。

【问题讨论】:

  • 运行了三种不同的方法,因为您正在创建一个新的 myclass。如果你想避免它们,你不应该创建三个可以做单例的实例。
  • 我想要三个不同的“类型”变量,一个等于 1,另一个等于 2,第三个是 3。但我希望类的每个实例都使用一种方法。怎么样?
  • 可以在类的原型中定义ret函数

标签: javascript class methods instance


【解决方案1】:

方法确实不同。你在浪费内存。

ins1.ret == ins2.ret; // false

相反,您可以在原型中定义方法:

function myClass(){}
myClass.prototype.type = 1;
myClass.prototype.ret = function(){
  return this.type;
};

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2011-01-12
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多