使用JS有一個(gè)很惱人的問(wèn)題,當(dāng)我把對(duì)象賦值給新的對(duì)象后,新的對(duì)象改變了,舊的對(duì)象也會(huì)跟著改變,如以下例子:
// 被引用的對(duì)象
var oldModel = {
name: "oldModel",
value: 123
}
// 新的對(duì)象從舊的對(duì)象賦值
var newModel = oldModel
// 只改變新對(duì)象的值
newModel.name = "newModel"
console.log("打印oldModel")
console.log(oldModel)
console.log("-------------")
console.log("打印newModel")
console.log(newModel)

image.png
按照我們預(yù)期的結(jié)果,打印的oldModel的name應(yīng)該還是oldModel才對(duì)。
出現(xiàn)這問(wèn)題,主要是因?yàn)樵贘S里面使用的是地址引用,所以無(wú)論你修改的是新對(duì)象還是舊對(duì)象,實(shí)際上操作的都是同一個(gè)對(duì)象。
解決方法:
我們?cè)诮o對(duì)象賦值的時(shí)候,改成 var newModel = $.extend(true,{},oldModel) 就可以了
// 被引用的對(duì)象
var oldModel = {
name: "oldModel",
value: 123
}
// 新的對(duì)象從舊的對(duì)象賦值
var newModel = $.extend(true,{},oldModel)
// 只改變新對(duì)象的值
newModel.name = "newModel"
console.log("打印oldModel")
console.log(oldModel)
console.log("-------------")
console.log("打印newModel")
console.log(newModel)

image.png
現(xiàn)在再看效果,改變新對(duì)象,舊對(duì)象不會(huì)再跟著改變了。
惱人的問(wèn)題終于解決了!