functionPerson(){}Person.prototype.run=function(){console.log('run')}functionAnimale(){}Animale.prototype=Person.prototype//为什么不推荐这样直接改变某个函数的原型Animale.prototype.eat=function(){console.log('eat')}console.log(newAnimale().run())Animale.prototype=Person.prototype这一句正确的写法应该是vartempFunc=function(){}tempFunc.prototype=Person.prototypeAnimale.prototype=newtempFunc()为什么需要这个tempFunc,直接Animale.prototype=Person.prototype这样赋值为什么是有问题的?
2 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
Animale.prototype=Person.prototype这样写没问题,Animale的原型和Person原型指向同一个对象。但如果你要实现继承,希望Animale是子类,Person是父类。那么你在Animale.prototype里修改的任何方法,实际上还是改变了Person.prototype。Animale的原型对象(子类)无法独自扩展,违背了继承的思想vartempFunc=function(){}tempFunc.prototype=Person.prototypeAnimale.prototype=newtempFunc()此时Animale.prototype为tempFunc的一个实例对象,而tempFunc的原型对象为Person.prototype,这样修改子类Animale.prototype不会影响父类Person.prototype,也就是形成了一条原型链。
添加回答
举报
0/150
提交
取消