为什么原型对象不改变?

Why doesn't prototype object change?

据我所知,对象是由引用分配的(它们没有被复制)。因此,如果对象的更改通过一个 link 发生,那么它们将通过另一个发生。

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

let b = a;
delete a.politician;

console.log(b); //there's no politicaian as well

那么...为什么这里的工作方式不同? prototype 是一个对象,因此更改应该无处不在(两个 links)。

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; //reassignment

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'; //reassignment

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

为什么会这样?为什么在某些情况下会发生变化,而在其他情况下不会发生变化?

在您的示例中,您正在做两件不同的事情:

  • 重新分配原型:将使新对象继承自新原型,但不是以前创建的对象。旧原型直接被旧对象引用,所以重新分配 Constructor.prototype 对它们没有影响
  • 改变原型:改变现有和未来对象的原型