我可以使用+/-等扩展对象吗?

时间:2011-04-06 19:45:25

标签: javascript extending

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

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!

另见this jsfiddle

3 个答案:

答案 0 :(得分:2)

不应该对你正在做的事情产生任何副作用。请记住,您不会将您正在执行的操作称为“运算符重载”,或​​者您的代码用户可能认为他们实际上可以使用运算符。您可能还想问自己,“这真的能让编写代码变得更容易吗?”

答案 1 :(得分:1)

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

答案 2 :(得分:1)

alert( 'hello '['+']('world ','and ','see you later!') );

是的,做这样的事情会产生副作用 - 它会使你的代码难以理解。当你想出这个计划时,你到底在吸烟了什么?

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