JavaScript类实例是否克隆函数?

时间:2016-02-19 21:06:36

标签: javascript class methods instance

如果我有以下代码:

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()正在运行,或者三个?如果每个实例都创建一个新方法,我该如何避免这种情况?如果他们都做同样的事情,为什么有三个。

1 个答案:

答案 0 :(得分:4)

方法确实不同。你在浪费记忆力。

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

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

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