Javascript 改变操作员的行为
这更像是一种“为了好玩”的事情,因为实际使用它是不切实际的。我只是想满足我的好奇心,知道这是否可能 我有一个功能Javascript 改变操作员的行为,javascript,Javascript,这更像是一种“为了好玩”的事情,因为实际使用它是不切实际的。我只是想满足我的好奇心,知道这是否可能 我有一个功能 function longAdd(a,b){ //computation here return sum; } …将a和b的值作为字符串“相加”;也就是说,它遍历每个字符并将它们相加。因此,它可以计算出比其他方法更大的数字 (就本问题而言,实际代码不应相关,因此不包括在内) 我的问题是:是否可以直接更改“+”运算符以使用此函数?比如说, c+d 代码中的任何地方都可以计算
function longAdd(a,b){
//computation here
return sum;
}
…将a和b的值作为字符串“相加”;也就是说,它遍历每个字符并将它们相加。因此,它可以计算出比其他方法更大的数字
(就本问题而言,实际代码不应相关,因此不包括在内)
我的问题是:是否可以直接更改“+”运算符以使用此函数?比如说,
c+d
代码中的任何地方都可以计算longAdd(c,d)
有什么可能的黑客方法来实现这一点吗?就此而言,是否可以直接改变任何操作员的行为
注意:是的,我知道这会搞砸连接,大数值必须保留字符串。这只是一个我很好奇的概念
我的问题是:是否可以直接更改“+”运算符以使用此函数
不,JavaScript根本没有用户定义的运算符重载
我能看到的最接近的方法是使用自己的valueOf
方法定义一个对象,该方法返回将自身转换为字符串的结果,并对自身执行longAdd
,然后返回该结果。然后现有的+
将在a
和b
引用的对象上触发该行为
这并不是重载+
,而是利用了它已有的行为:
函数对象(val){
this.val=val;
}
Thing.prototype.valueOf=函数(){
//在这里,我只是加倍它;你实际上会做你的longAdd的事情
返回此值。val*2;
};
var a=新事物(1);
var b=新事物(2);
console.log(a+b);//6(1*2+2*2)
我的问题是:是否可以直接更改“+”运算符以使用此函数
不,JavaScript根本没有用户定义的运算符重载
我能看到的最接近的方法是使用自己的valueOf
方法定义一个对象,该方法返回将自身转换为字符串的结果,并对自身执行longAdd
,然后返回该结果。然后现有的+
将在a
和b
引用的对象上触发该行为
这并不是重载+
,而是利用了它已有的行为:
函数对象(val){
this.val=val;
}
Thing.prototype.valueOf=函数(){
//在这里,我只是加倍它;你实际上会做你的longAdd的事情
返回此值。val*2;
};
var a=新事物(1);
var b=新事物(2);
console.log(a+b);//6(1*2+2*2)
Aw,bummer…嗯,关于的价值很有意思,无论如何,谢谢你提供的信息。Aw,bummer…嗯,关于的价值很有意思,无论如何,谢谢你提供的信息。@Quentin:嗯…那太尴尬了…:-)我的意思是,我在那里写了被接受的答案,你会认为我手边有一个链接,记得使用它。@T.J.Crowder-是的,你不记得你写的所有一万三千个答案的细节,真是丢脸@昆汀:嗯……那太尴尬了……:-)我的意思是,我在那里写了被接受的答案,你会认为我手边有一个链接,记得使用它。@T.J.Crowder-是的,你不记得你写的所有一万三千个答案的细节,真是丢脸!