0

我有点困惑,以下哪一项是创建包含函数的处理程序的正确方法......具有函数的对象或新函数本身?比如说,计算器功能的处理程序......

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;
    }
};

一个比另一个有什么优势/劣势?

4

1 回答 1

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

还有一个更好的解决方案,基于原型继承:

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);
于 2013-09-24T16:11:28.997 回答