Зеркальные изменения в JavaScript - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь создать объектную связь, в которой свойство nextString объекта2 будет отражать любые изменения объекта originalString.

var object1 = {
    nestedObject: {
        originalString: "old"
    }
}
var object2 = {
    nextString: object1.nestedObject.originalString
}
object1.nestedObject.originalString = "new";

.

Я прочитал, что это происходит из-за того, что копия строки сделана, поскольку JS не использует передачу по ссылке, как язык C.

С примером отношения междуОбъект1 и объект2 выше, есть ли способ выполнить то, что я хотел бы?

1 Ответ

0 голосов
/ 19 мая 2018

Javascript использует передачу по ссылке, однако, когда вы делаете originalString = "new", вы фактически назначаете новую ссылку на originalString, поэтому она больше не указывает на значение old.

Чтовместо этого вы можете удерживать ссылку на nestedObject, поскольку объект не переназначается, только строка внутри.

var object1 = {
    nestedObject: {
        originalString: "old"
    }
}

var object2 = {
    // Hold a reference to the nestedObject
    nestedObject: object1.nestedObject,
}

// Assign a new value
object1.nestedObject.originalString = "new";

// Both objects will reflect the change
console.log(object1.nestedObject.originalString);
console.log(object2.nestedObject.originalString);
...