在JavaScript对象上执行数学运算

时间:2011-05-13 23:47:25

标签: javascript prototype-programming

有没有办法在JavaScript中覆盖像+-*/这样的数学运算符的行为?

让我们说例如我有一个人物对象:

var Person = (function() {
  function _Person(age) {
    this.age = age;
  }
  /* I was hoping something like this would work
  _Person.prototype.add = function(input) {
    return this.age + input.age;
  };*/
  return _Person;
})();

我制作了两个人,并希望将它们加在一起以获得他们的总年龄:

var p1 = new Person(24);
var p2 = new Person(25);
var totalAge = p1+p2;//should equal 49

我希望能够实现原型方法或某些东西来指定当两个对象一起添加时要做什么。其他语言有这个,例如python有__add__,javascript有没有办法做到这一点?

以下是jsfiddle中的示例代码:http://jsfiddle.net/HYrPM/

2 个答案:

答案 0 :(得分:4)

JavaScript没有运算符重载功能。

答案 1 :(得分:2)

你不能重载ops,但是你可以向人们添加一个valueOf函数,它可以返回你想要的任何东西(我知道这是6个月前被问到的,但有人刚刚编辑过它:))

function Person( age ){
    this.age = age;
}

Person.prototype.valueOf = function(){
    return this.age;
}

var p1 = new Person( 24 )
  , p2 = new Person( 25 );

p1+p2 // 49