JAVASCRIPT - 为什么这个对象没有改变?

时间:2010-12-29 19:30:46

标签: javascript object

function myFunc(theObject) {  
  theObject = {make: "Ford", model: "Focus", year: 2006};  
}  
var mycar = {make: "Honda", model: "Accord", year: 1998};  
var x = mycar.make;     // returns Honda  
myFunc(mycar);  
var y = mycar.make;     // still returns Honda  

为什么myFunc不改变mycar对象?

4 个答案:

答案 0 :(得分:9)

theObject = { ... }内执行myFunc时,您将创建一个新对象并将其引用分配给局部变量theObject。这不会改变原始对象。

要修改原始对象的内容,您需要直接修改其属性,如下所示:

theObject.make = 'Ford';
theObject.model = 'Focus';
theObject.year = 2006;

答案 1 :(得分:2)

问题已经回答,只是为了让它更清晰:

function myFunc(theObject) {  
      theObject = {make: "Ford", model: "Focus", year: 2006};  
} 

是类似的(忘记语法,得到消息):

function myFunc(theObject) {  
      theObject = new TheObject("Ford","Focus",2006);  
} 

换句话说,引用了参数,但是您正在通过构造新对象来更改该引用。

注意:由于Java语法如此受欢迎,我想到使用类似JAVA的语法,以便在教学目的下解释您正在创建一个全新的实例。 “TheObject”将是该类的名称。

答案 2 :(得分:0)

在进行您提供的更改时,Javascript正在修改本地引用而不是原始引用。关于SO的这篇文章应该有所帮助:

Is JavaScript a pass-by-reference or pass-by-value language?

答案 3 :(得分:0)

改变这个:

function myFunc(theObject) {  
      theObject = {make: "Ford", model: "Focus", year: 2006};  
    } 

在这里,您将变量重新分配给新对象。原始文件保持不变,因为参数不链接到保存对象的变量。

为:

function myFunc(theObject) {  
  theObject.make = "Ford";
} 

这会更改您传入的对象的属性。