2011-04-06 59 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

相關問題