在C/C++中,我们知道我们有指向对象和数组的指针,因此它们可以作为函数参数传递,而不需要克隆这些对象和数组。在Javascript中没有这样的选项,因此我们只使用对象变量。
这是一个好的做法吗?
function setWhite(obj){
obj.color = "white";
}
var shirt = {
color: "red",
size: "L"
}
setWhite(shirt);
console.log(shirt);
在C/C++中,我们知道我们有指向对象和数组的指针,因此它们可以作为函数参数传递,而不需要克隆这些对象和数组。在Javascript中没有这样的选项,因此我们只使用对象变量。
这是一个好的做法吗?
function setWhite(obj){
obj.color = "white";
}
var shirt = {
color: "red",
size: "L"
}
setWhite(shirt);
console.log(shirt);
function setWhite(obj){
obj = {
color: "white",
size: "M"
}
}
var shirt = {
color: "red",
size: "L"
}
setWhite(shirt);
console.log(shirt); // shirt will remain red / L
setWhite()
方法中重新赋值了obj
,因此原始的obj
对象将被该函数覆盖丢失。{};
时,将创建一个新引用。 - João Pimentel FerreirasetWhite()
中执行 obj = ...
时,它会忘记旧引用,并创建对新对象的引用。旧的 shirt
仍然存在,因为函数外部的变量仍然保留着引用。但是,当你在函数内分配时,外部变量不会受到影响。您必须分配给对象的属性才能更改它们。 - Jake T.{}
中,添加一行 setWhite: () => { this.color = "white"; }
。然后,如果你想将其更改为白色,就可以调用 shirt.setWhite()
。你也可以像这样添加 setColor: (newColor) => { this.color = newColor }
属性,然后调用 shirt.setColor('white');
。 - Jake T.