Javascript对象实例与返回的函数

在javascript之间创build对象有什么区别

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

我曾经在不同的情况下使用过,但是从来没有理解过它们之间的区别,我知道后一种方法是创造function的头等大事,但仍然可以在很多情况下使用,任何人都可以为我这么做吗? 我无法find任何关于此search

第一个也为每个实例创build函数。 在这种情况下唯一的区别是新实例在第一种情况下从test.prototypeinheritance,而在第二种情况下它直接从Objectinheritance。

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

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

由于所有实例都是从Test.prototypeinheritance的,因此calculate函数只存在一次,所有实例都引用相同的函数。

正如菲利克斯在评论中所说的,不同的是inheritance链。 第一个从test.prototypeinheritance,第二个从Objectinheritance。 结果是,如果你只想创build一次函数,并让每个实例共享一次,那么你就必须这样做:

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