Javascript 对象实例与返回的函数

Javascript object instance vs returned functions

本文关键字:函数 返回 对象 实例 Javascript      更新时间:2023-09-26

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());

在不同的情况下使用过两者,但从未理解其中的区别,我知道后一种方法具有为实例创建函数的开销,但仍然看到它在很多情况下使用,任何人都可以为我澄清这一点吗?我无法通过搜索找到有关此的任何内容

第一个还为每个实例创建函数。这种情况的唯一区别是,在第一种情况下,新实例继承自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函数只存在一次,并且所有实例都引用同一函数。

正如菲利克斯在评论中所说,区别在于继承链。第一个继承自test.prototype,第二个继承自Object。结果是,如果您只想创建一次函数并让每个实例共享它,则必须执行以下操作:

test = function (a, b) {
  this.a = a;
  this.b = b;
}
test.prototype.calculate = function () {
  return this.a + this.b;
}