2016-02-19 78 views
0

如果我有以下代码:JavaScript类实例是否克隆函数?

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

+0

有跑步,因为你正在创建一个新的MyClass的三种不同的方法。如果你想避免它们,你不应该创建三个实例你可以做单身。 –

+0

我想要有三个不同的“类型”变量,一个等于1,另一个等于2,第三个是3.但我希望每个类的实例都使用一种方法。怎么样? –

+1

你可以在类的原型中定义ret函数 – oskr

回答

4

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

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

相反,你可以在原型定义的方法:

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