2014-01-14 142 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