在
之间的javascript中创建对象有什么区别test = function(a, b){
this.calculate = function(){
return a + b;
}
}
obj = new test(1, 2);
console.log(obj.calculate());
和
test = function(a, b){
return {
calculate: function(){
return a + b;
}
}
}
obj = test(1, 2);
console.log(obj.calculate());
我已经在不同的情况下使用了两种,但从来没有理解它们的区别,我知道后一种方法有为实例创建函数的头脑,但仍然看到它在很多情况下使用,任何人都可以为我做这个问题?我无法通过搜索
找到任何相关信息答案 0 :(得分:5)
第一个也为每个实例创建函数。这种情况的唯一区别是新实例在第一种情况下继承自test.prototype
,而在第二种情况下直接继承自Object
。
在第一种情况下,通过将函数添加到原型,让实例共享代码会更容易。例如:
var Test = function(a, b){
this._a = a;
this._b = b;
};
Test.prototype.calculate = function(){
return this._a + this._b;
};
由于所有实例都继承自Test.prototype
,因此calculate
函数只存在一次,并且所有实例都引用相同的函数。
答案 1 :(得分:2)
菲利克斯在评论中说,区别在于继承链。第一个继承自test.prototype
,第二个继承自Object
。结果是,如果你只想创建一次函数并让每个实例共享它,你必须做这样的事情:
test = function (a, b) {
this.a = a;
this.b = b;
}
test.prototype.calculate = function () {
return this.a + this.b;
}