Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 改变操作员的行为_Javascript - Fatal编程技术网

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-是的,你不记得你写的所有一万三千个答案的细节,真是丢脸!