При регистрации массива, содержащего классы, печатается текущая версия классов, а не ее состояние на момент регистрации - PullRequest
0 голосов
/ 16 мая 2019

Я новичок в JS из iOS и Swift.

Я объявляю массив, содержащий класс, и затем изменяю значение в этом классе. Когда я печатаю класс до и после изменения значения, он, по-видимому, печатает текущую версию класса. Вот пример:

class Something {
    constructor(name) {
        this.name = name
    }
}

var somethings = []

somethings.push(new Something("hello"))

console.log(somethings) //object printed with name as "bye"
console.log(somethings[0].name) //"hello"

somethings[0].name = "bye"
console.log(somethings) //object printed with name as "bye"
console.log(somethings[0].name) //"bye"

Я что-то здесь неправильно понимаю? Это ожидаемое поведение?

1 Ответ

0 голосов
/ 16 мая 2019

Это будет зависеть от вашего браузера.Если браузер сохраняет только ссылку на ваш объект somethings, он будет обновляться в журнале при обновлении реального объекта.

Если он регистрирует копию объекта, он никогда не изменится.

Например, посмотрите на этот фрагмент - когда вы нажимаете «Выполнить фрагмент кода», он регистрирует копию объекта, поэтому он не изменится:

class Something {
    constructor(name) {
        this.name = name
    }
}

var somethings = []

somethings.push(new Something("hello"))

console.log(somethings) //object printed with name as "bye"
console.log(somethings[0].name) //"hello"

somethings[0].name = "bye"
console.log(somethings) //object printed with name as "bye"
console.log(somethings[0].name) //"bye"

Если вы одновременно открываете консоль браузера на этой странице, нажимая «Выполнить фрагмент кода», вы увидите, что браузер регистрирует его в точности так, как вы его описали.

...