示例 JSFiddle,这样您就可以更好地了解http://jsfiddle.net/brsXL/3/上发生的事情(打开您的控制台并查看记录的vars
对象)。
我正在为 JavaScript 中的特定数学子集构建解析器和计算机,它将表达式作为来自用户的字符串,并允许他们使用变量。为了使我的计算逻辑简单但允许使用变量,我创建了一个对象,它的作用类似于数字,但具有通过引用传递的好处。
var Variable = function(value) {
this.value = value || null;
}
Variable.prototype.valueOf = function() {
return this.value;
}
这样可以:
var a = new Variable(10);
console.log(a + 2); // = 12
console.log(a / 2); // = 5
但是,只要我希望执行任何形式的赋值操作,例如+=
对象丢失并被针对对象的 value 属性的操作结果替换。例如
var a = new Variable(10);
console.log(a += 2); // = 12
console.log(a); // = 12
我需要它像这样工作的原因是因为我想使用相同的函数来处理数字和变量。我可以为每个赋值操作添加代码,但这对我来说不是最理想的,例如
var ops = {
"+=" : function(a, b) {
if (a instanceof Variable) {
a.value += b;
} else {
a += b;
}
return a;
},
...
}
但我更愿意写:
var ops = {
"+=" : function(a, b) {
return a += b;
},
...
}
这可以做到吗?