1

我尝试使用运算符扩展本机对象。有用。会不会有你能想到的副作用?

Number.prototype['+++'] = function(n){
    return this + (2*n);
};

String.prototype['+'] = function(){
    return this += [].slice.call(arguments).join('');
}

alert( 10['+++'](10) ); //=> 30
alert( 'hello '['+']('world ','and ','see you later!') ); 
      //=> hello world and see you later!

另见这个jsfiddle

4

3 回答 3

2

你所做的事情不应该有任何副作用。请记住,您不会将您正在做的事情称为“运算符重载”,否则您的代码的用户可能会认为他们实际上可以使用运算符。您可能还想问自己,“这真的让编写代码更容易了吗?”

于 2011-04-06T19:50:48.620 回答
1

我看不出这会如何影响任何事情。看起来唯一的方法是在它通知开发人员没有这样的操作员(我假设)之前打错字,但现在它会让你这样做。虽然我不是经验丰富的 javascript 开发人员。

于 2011-04-06T19:50:41.027 回答
1
alert( 'hello '['+']('world ','and ','see you later!') );

是的,做这样的事情有一个副作用——它使你的代码不可读。当你想出这个计划时,你到底在抽什么?

此外,您所做的与运营商无关。您只是在创建一个名称恰好是“+”或“+++”的对象属性。只有当解释器认为它是一个运算符时,一个“+”字符才是一个运算符。如果它在字符串文字中,那么它只是另一个字符。

于 2011-04-06T20:09:08.993 回答