如何将逻辑/数学运算符分配给Object的函数?

时间:2016-09-25 15:56:19

标签: javascript object operators

所以我在JavaScript中创建一个表达式解析器并且想知道:有没有办法将对象的函数分配给逻辑/数学运算符,以便每次在该对象上使用运算符时都会调用它?

我知道,例如,每当您尝试将对象连接到字符串时,它会自动调用对象的.toString()方法。

例如,假设您有一个this.number属性的对象。我希望能够做到以下几点:

function MyObject(number) {
    this.number = number;
}

var obj1 = new MyObject(2);
var obj2 = new MyObject(3);

obj1 *= obj2;
obj2 *= 3;

obj1.number; // Would return 6.
obj2.number; // Would return 9.

在这种情况下,我会覆盖*=运算符,以便每次调用它以将值赋给MyObject的实例时,它会将实例的this.number值乘以右边的值(原始数值或另一个实例的this.number值)。

有没有办法实现这个目标?

任何帮助都会很棒!

谢谢: - )

1 个答案:

答案 0 :(得分:1)

您可以创建.valueOf()函数来返回数值。运行时将调用类似于它决定调用.toString()时的情况 - 也就是说,当它想要将对象强制转换为数值时。

但是,您无法强制运行时专门处理分配,因此您无法进行

obj1 *= obj2;

的工作。您可以做的最好(使用.valueOf()实现):

obj1.number = obj1 * obj2;

.valueOf()可能类似于:

MyObject.prototype = {
  valueOf: function() { return this.number; }
};