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
相关产品推荐
相关产品推荐

