21
Июл
2021

Почему не происходят изменения объекта?

Насколько я знаю, объекты присваиваются по ссылке (!не копируются). Поэтому если изменения в объекте происходят по одной ссылке, то они происходят и по другой.

let a = {
  writer: 'J.K. Rowling',
  singer: 'Beyonce',
  politician: 'A. Merkel'
};

let b = a;
delete a.politician;

console.log(b); //здесь также нет politicaian

Почему тогда здесь все работает немного по-другому? По тому же принципу prototype является одним объектом, поэтому изменения должны быть везде (по двум ссылкам).

let userInfo = {
    name: 'Kira',
    surname: 'Li',
    age: 25,
    country: 'USA',
    city: 'LA'
};

let food = {
    fruit: 'apple',
    vegetable: 'cabbage',
    pastry: 'bun',
    drink: 'water'
};

function Constructor() {};
Constructor.prototype = userInfo;
let obj = new Constructor;
Constructor.prototype = food; //произошло переприсвоение

console.log(Object.getPrototypeOf(obj)); //все также userInfo

А вот здесь, например, изменение происходит. Почему?

let userInfo = {
        name: 'Kira',
        surname: 'Li',
        age: 25,
        country: 'USA',
        city: 'LA'
    };

    let food = {
        fruit: 'apple',
        vegetable: 'cabbage',
        pastry: 'bun',
        drink: 'water'
    };

    function Constructor() {};
    Constructor.prototype = userInfo;
    let obj = new Constructor;
    Constructor.prototype.name = 'Klara'; //произошло переприсвоение

    console.log(Object.getPrototypeOf(obj));

Почему так? Почему в некоторых случаях происходит изменение объекта, а в некоторых нет?

Источник: https://ru.stackoverflow.com/questions/1307531/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%BD%D0%B5-%D0%BF%D1%80%D0%BE%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D1%8F%D1%82-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0

Тебе может это понравится...

Добавить комментарий