2014-01-14 143 views
0

我想將值傳遞給Change函數。但我想只傳遞數組內的引用。這工作:通過引用更改值

var test = ["Hello World","Hello You"]; 
HelloCar(test,0); 

function HelloCar(myarray,key) 
{ 
    myarray[key] = "Hello Car"; 
} 

但是,這將失敗:

var test = ["Hello World","Hello You"]; 
HelloCar(test[0]); 

function HelloCar(myvalue) 
{ 
    myvalue = "Hello Car"; 
} 

有沒有辦法通過只有真正的參考,不完整的數據?

+1

否; test [0]是一個String並且JavaScript字符串是不可變的; [在Javascript中通過引用傳遞字符串](http://stackoverflow.com/questions/1308624/pass-a-string-by-reference-) –

+0

第一個HelloCar版本有什麼問題?我認爲它更好:) –

+0

HelloCar實際上是一個Value Change Class,它不應該知道所有的數據。但是我認爲沒有更好的解決方案;) – bergman

回答

0

如何使用原型:

Array.prototype.HelloCar= function (idx) { 

    this[idx] = 'Hello Car' 

} 

test.helloCar(0) 
0

基本類型(如字符串,數字和布爾值)始終被傳遞爲值,而不是引用。

最接近模擬引用變量的方法是將它們包裝在Object中。

但是,如果您不想嘗試按照自己的意願彎曲JavaScript語法,就可以實現您需要做的任何事情,這可能會讓您感到欣慰。

如果你擔心其對數據的訪問不應該(不,我能看到的任何原因,在您的實例)的方法,那麼我會寫這樣的:

var test = ["Hello World","Hello You"]; 

test[0] = HelloCar(test[0]); 

function HelloCar(string){ 

    // any logic to change string in any way 
    string = "HelloCar"; 

    return string; 

} 

這看起來似乎有點沒有意義,但讓我們假裝(爲了參數的緣故),您可以將引用傳遞給基本類型的變量......如果是這樣,那麼方法將訪問的唯一信息就是它的值,因爲字符串變量比內存地址和值更多。作爲一個字符串,除了一堆字符之外,它沒有大量的信息。因此,我們需要以扭曲其值的方式應用於變量的任何邏輯實際上將基於與上述方法相同的原則。

+0

HelloCar是一個值更改器實例類。它應該爲自己處理所有事情。當然,我可以使用更改事件,但數據持有者需要處理實際值切換。 – bergman

+0

我不太確定,如果我明白'價值改變者實例類'是什麼? – shennan

+0

var change_car_tb = new Change_Textbox(change_car_value);它基本上是一個文本框 – bergman