首页 > 解决方案 > 为什么原型对象不改变?

问题描述

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

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是一个对象,因此更改应该无处不在(通过两个链接)。

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));

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

标签: javascriptobjectprototype

解决方案


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

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

推荐阅读