我有這樣的功能:改變的價值「這一」
Number.prototype.f=function()
{
this=2;//This is not working
}
var x=0;
x.f();
alert(a);//Here I want that x equal 2
而且我想x是2底!
我有這樣的功能:改變的價值「這一」
Number.prototype.f=function()
{
this=2;//This is not working
}
var x=0;
x.f();
alert(a);//Here I want that x equal 2
而且我想x是2底!
你不能這樣做,確切的說,但你可以通過顯式使用數構造函數和重寫toString
方法得到類似的效果。
所以,在認識到this is sick and should never be seen in production code:
Number.prototype.f = function() {
this.toString = function() {
return "2";
};
}
var x = new Number(0);
x.f();
alert(x);
我只在Chrome中進行了測試。
非常好!以及如何將它寫入生產代碼? – user1342369 2012-04-19 13:35:37
你不知道。整個概念很瘋狂。你可能有一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),但你需要提出一個解釋你的用例的問題。 – Quentin 2012-04-19 13:38:30
如果例如我想要做一個像這樣的函數:x.pow(y)並且結果進入x – user1342369 2012-04-19 13:47:31
這是不可能的。
(Pun打算)
數字是不可變的。
你確定嗎?當我們做array.push(2);功能推動改變陣列! – user1342369 2012-04-19 13:24:46
@ user1342369:是的,因爲數組是打算改變的數據結構。一個數字總是相同的數字,其身份不會改變或取決於任何事物。 – maerics 2012-04-19 13:31:00
@ user1342369:這是因爲_arrays_不是不可變的。 – SLaks 2012-04-19 13:32:49
某種程度上可以做到。數字通過值傳遞,而不是參考。因此,在最好的,你可以調用y = x.f();
使用此項功能:
Number.prototype.f = function() { return 2; };
至於您的評論:
當我們這樣做的Array.push(2);功能推動改變陣列!
當然是的。數組是對象並通過引用傳遞。該功能可能看起來是這樣的:
Array.prototype.push = function(val) {
var t = this;
t[t.length] = val;
};
好的...謝謝你,但是我不能通過參考傳遞x? – user1342369 2012-04-19 13:29:31
如果'x'是一個原始類型(數字和字符串是主要類型),則不會發生這種情況 – 2012-04-19 13:40:18
如果有人發現這個有用,複製一個數組而不通過引用傳遞 - >'newarr = arr.slice(0)' – ajax333221 2012-04-19 15:22:35
這將是很好的解釋_爲什麼你需要這樣做。可能有更好的方法。 – drnewman 2012-04-19 13:39:32