You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Object.create是否会修改其他对象原型?为何house1方法未更新?

问题解析:为何house1的原型未被修改?

先看你给出的代码:

var House = {rooms: 3};
House.switchOffMains = function(){ console.log("Mains switched off"); };

var Constructor = function(){};
Constructor.prototype = House;

var house1 = new Constructor();

var House = Object.create(House);
House.switchOffMains = function() { console.log("Function has been modified"); };

调用house1.switchOffMains()输出旧内容的核心原因是变量赋值和对象引用是两回事,具体拆解:

  • 一开始创建的House是一个普通对象,此时Constructor.prototype直接指向了这个具体的对象,不是House这个变量本身。
  • 后面执行var House = Object.create(House);时,只是给House变量重新赋值了一个新对象(这个新对象以旧House为原型),但之前Constructor.prototype指向的旧House对象依然存在于内存中,没有被替换。
  • house1的原型链是:house1 → 旧House对象 → Object.prototype,和后来重新赋值的新House变量完全没关系,所以调用方法时,找的还是旧House上的原函数。

如果想让house1能访问到新方法,需要直接修改Constructor.prototype,让它指向新的House对象,而不是只修改变量的指向。

内容的提问来源于stack exchange,提问作者Ikim SS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:22:36