2013-09-24 73 views
0

我有點困惑,以下哪一種是創建包含函數的處理函數的正確方法......帶有函數或新函數本身的對象? 說,對於計算功能的處理器...Javascript對象或函數處理函數的新函數

CalculatorHandler = new function(){ 
    this.add = new function(a, b){ 
      return a + b; 
    }; 
    this.sub = new function(a, b){ 
      return a-b; 
    }; 
}; 

或者

CalculatorHandler = { 
    this.add: function(a, b){ 
      return a + b; 
    }, 
    this.sub: function(a, b){ 
      return a-b; 
    } 
}; 

是否有一個比其他任何優勢/劣勢?

+1

第二無效語法 –

+0

...和第一圖案[不應該被用來](http://stackoverflow.com/ a/10406585/1048572) – Bergi

+0

@chumkiu我也認爲一開始,但現在我認爲它是有效的(儘管它在這裏不能正常工作)。所有'new'關鍵字想要的是一個函數來調用,並且它在這裏。結果值當然是一個普通的對象而不是一個函數。 – Pointy

回答

2

如果你只是想有一個「籃子」握住你的功能結合在一起,只需使用一個對象,沒有必要爲一個構造函數:

CalculatorHandler = { 
    add: function(a, b){ 
      return a + b; 
    }, 
    sub: function(a, b){ 
      return a-b; 
    } 
}; 

注意,在您的示例this如何是不正確因爲它將引用您在(可能是全局 - 窗口)中定義CalculatorHandler對象的範圍。

另一方面,如果你想構建一個計算器來獲得一些數據並對其進行操作,那麼你可以在第一個例子中使用類OOP方法。

CalculatorHandler = function() { 
    this.total=0; 

    this.add = function(a) { 
    this.total += a; 
    }; 

    this.sub = function(a) { 
    this.total -= a; 
    }; 
} 

var calc = new CalculatorHandler(); 
calc.add(4); 
calc.sub(3); 

而更好的解決方案,是根據prototipal繼承:

CalculatorHandler = function() { 
    this.total=0; 
} 

CalculatorHandler.prototype.add = function(num) { 
    this.total += num; 
} 

CalculatorHandler.prototype.sub = function(num) { 
    this.total -= num; 
}; 

var calc = new CalculatorHandler(); 
calc.add(4); 
calc.sub(3);