我尝试使用运算符扩展本机对象。有用。你会想到会有副作用吗?
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!
答案 0 :(得分:2)
不应该对你正在做的事情产生任何副作用。请记住,您不会将您正在执行的操作称为“运算符重载”,或者您的代码用户可能认为他们实际上可以使用运算符。您可能还想问自己,“这真的能让编写代码变得更容易吗?”
答案 1 :(得分:1)
我看不出这会对任何事情产生什么影响。看起来唯一的方法是通过一个错字,在它通知开发人员之前没有这样的操作员(我假设),但现在它会让你这样做。虽然我不是一位经验丰富的JavaScript开发人员。
答案 2 :(得分:1)
alert( 'hello '['+']('world ','and ','see you later!') );
是的,做这样的事情会产生副作用 - 它会使你的代码难以理解。当你想出这个计划时,你到底在吸烟了什么?
此外,您所做的与运营商无关。您只是创建一个名称恰好是“+”或“+++”的对象属性。如果解释器认为它是运算符,则“+”字符只是运算符。如果它在字符串文字中,那么它只是另一个字符。