函数处理程序的Javascript对象或新函数

函数处理程序的Javascript对象或新函数,javascript,Javascript,我有点困惑,因为下面哪一个是创建包含函数的处理程序的正确方法…一个具有函数的对象还是一个新函数本身? 比如,计算器函数的处理程序 CalculatorHandler = new function(){ this.add = new function(a, b){ return a + b; }; this.sub = new function(a, b){ return a-b; }; }; 或 一个函数比另一个函数有什么

我有点困惑,因为下面哪一个是创建包含函数的处理程序的正确方法…一个具有函数的对象还是一个新函数本身? 比如,计算器函数的处理程序

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


一个函数比另一个函数有什么优点/缺点吗?

如果您只想有一个“篮子”来把函数放在一起,只需使用一个对象,就不需要构造函数:

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

第二个是无效的语法…第一个模式@chumkiu起初我也这么认为,但现在我认为它是有效的(尽管它在这里不能正常工作)。
new
关键字只需要调用一个函数,这里就有了。结果值当然是一个普通对象,而不是一个函数。
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);