2011-04-06 64 views
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! 

this jsfiddle

+1

我想不出任何负面影响,但是我会问自己,这是否确实使代码更容易编写/读取?我认为你的情况恰恰相反。 – Alex 2011-04-06 19:52:42

回答

2

不应该有任何副作用,你在做什么。请记住,您不会称之为“运算符重载”,或​​者您的代码的用户可能认为他们实际上可以使用运算符。你也可以问自己,“这是否真的使编写代码更容易?”

+0

它以考虑运算符重载的实验开始。现在改变了小提琴的标题。此外,这一切都只是为了好玩,但你永远不知道未来是否会有一些用途。在我们国家,'['%+']'可以用来计算含增值税的金额,例如。另一方面:'Number.prototype.VAT'或类似的东西可以做同样的事情。 – KooiInc 2011-04-06 19:56:11

1

看到我看不到如何会影响什么。看起来像唯一的方法是在打印错误之前通知开发者没有这样的操作符(我假设),但现在它会让你这样做。虽然我不是一个有经验的JavaScript开发人员。

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

是的,这样做的副作用 - 它使你的代码不可读。当你提出这个计划时,你到底在抽烟吗?

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

+0

其实9周前我放弃了吸烟。那一定是吧! ; D – KooiInc 2011-04-06 20:14:00

+0

无论如何,是的,这是一个真正的副作用。是的,这不是操作员,我意识到这一点。这就是为什么我们不能使用'Number.prototype。+++'我们称之为“类似运算符”或其他。 – KooiInc 2011-04-06 20:20:56

+0

嗯,这btw做什么? http://www.indiscripts.com/post/2010/05/operator-overloading-with-extendscript – KooiInc 2011-04-07 13:47:40

相关问题