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对象?
答案 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";
}
这会更改您传入的对象的属性。