繁体   English   中英

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

[英]JAVASCRIPT - Why isn't this object changed?

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对象?

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

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

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

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

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

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

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

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

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

在进行您提供的更改时,Javascript正在修改本地引用而不是原始引用。 SO上的帖子应该有所帮助:

JavaScript是一种传递引用还是按值传递的语言?

改变这个:

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

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

至:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM