关于原型继承缺点的问题

关于原型继承缺点的问题

function b(){
	this.name=[1,2,3]
}
b.prototype.ha={xi:"xi"};
function fn(){};

fn.prototype=new b();
fn.prototype.constructor=fn;
var j1=new fn();
j1.name.shift();
j1.ha.xi="wohao"
console.log(j1.name);
console.log(j1.ha.xi)
var j2=new fn();
console.log(j2.name);
console.log(j2.ha.xi);

var j3=new b();
console.log(j3.name);
console.log(j3.ha.xi);

我知道实例j1中修改父方法的引用类型属性、方法的话,会导致共有这些引用类型的实例的值也会发生变化,但是我直接实例父方法的实例j3为什么只有原型上的ha属性发生变化,而.name就没有改变为[2,3]呢?麻烦老师了

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

因为原型在实例化的时候都会指向同一个地址 , 但是函数本身的属性和方法每实例化一次 ,都指向的不同 . 所以在实例化b之后 , 由于原型地址都是一样的 ,上面j1.ha.xi="wohao"已经改变了原型上面的内容 ,所以console.log(j3.ha.xi);会发生改变 . 而name是b本身上面的属性 ,所以是不会改变的

祝学习愉快 ,望采纳

  • 慕工程1453923 提问者 #1
    嗯嗯,谢谢老师。我还有一个问题就是console.log(j1.name===j2.name)为true,是不是因为fn.prototype=new b();把fn的原型指向了这一个实例化的b(),实例j1,j2的原型是指向同一个的b()。而var j3=new b();这个是指向另一个实例化的b(),是不是可以这样理解呢?麻烦了
    2018-08-20 11:29:00
  • 好帮手慕夭夭 回复 提问者 慕工程1453923 #2
    同学很聪明 , 理解的是对的哦
    2018-08-20 13:51:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师