javascript - 为什么原型对象不改变?
问题描述
据我所知,对象是由引用分配的(它们没有被复制)。因此,如果一个对象的变化是通过一个链接发生的,那么它们会通过另一个链接发生。
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));
为什么呢?为什么在某些情况下会发生变化而在其他情况下不会发生变化?
解决方案
在您的示例中,您正在做两件事:
- 重新分配原型:将使新对象继承新原型,但不继承以前创建的对象。旧原型直接被旧对象引用,因此重新分配
Constructor.prototype
对它们没有影响 - 改变原型:改变现有和未来对象的原型
推荐阅读
- scala - 带有dotty的运行时记录器异常
- python - 在 Flask 应用程序中使用查询服务
- python - Django中的错误与Celery异步发送到Sentry以避免Sentry的错误丢弃
- animation - 带有位置观察器的滚动上的 amp-html 动画
- java - 我用哪一行代码打印出用户输入的输入
- objective-c - 布局超出框架时 NSCollectionView 崩溃
- mysql - 从 Oracle 8i 到 MySQL 的代码转换
- python - Python脚本执行时间
- docker-swarm - 在 Docker Swarm 中使用 Ceph 卷的最快方法是什么?
- java - 异常类定义