为什么原型对象不改变?
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
对它们没有影响
- 改变原型:改变现有和未来对象的原型
据我所知,对象是由引用分配的(它们没有被复制)。因此,如果对象的更改通过一个 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
对它们没有影响 - 改变原型:改变现有和未来对象的原型