所以我在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
值)。
有没有办法实现这个目标?
任何帮助都会很棒!
谢谢: - )
答案 0 :(得分:1)
您可以创建.valueOf()
函数来返回数值。运行时将调用类似于它决定调用.toString()
时的情况 - 也就是说,当它想要将对象强制转换为数值时。
但是,您无法强制运行时专门处理分配,因此您无法进行
obj1 *= obj2;
的工作。您可以做的最好(使用.valueOf()
实现):
obj1.number = obj1 * obj2;
.valueOf()
可能类似于:
MyObject.prototype = {
valueOf: function() { return this.number; }
};