Javascript 对象实例与返回函数

标签 javascript node.js

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

在第一种情况下,通过将函数添加到原型(prototype),让实例共享代码会更容易。例如:

var Test = function(a, b){
   this._a = a;
   this._b = b;
};

Test.prototype.calculate = function(){
   return this._a + this._b;
};

由于所有实例都继承自 Test.prototypecalculate 函数只存在一次,所有实例都引用同一个函数。

关于Javascript 对象实例与返回函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14475909/

相关文章:

Javascript li 使用 for 循环从数组中列表

javascript - 在 Surface Pro 平板电脑上启用 jQuery UI 拖放

javascript - 获取随机 Discord 用户

javascript - 如何在没有嵌套回调的情况下访问变量?

arrays - 带有嵌套文档的 $lookup

javascript - 如何使用 Angularjs 将 html 添加到 DOM 中?

javascript - 在 tbody 上使用 empty() 会不断调整整个表格的宽度

Javascript Parse Promise 函数给出 'success/error was not called' 错误

javascript - 处理竞争条件 : Passport SignUp function works but responds with 404 Error

javascript - 表单提交项目值正在重置