js原型链继承问题求解
现在有js的两个类(就是两个函数),一个父类,一个子类,子类继承了父类,通过child.prototype= new parent()。来继承.然后再实例化一个子类,var obj = new child().
这时候在obj这个对象上查找一个属性的时候,首先在自己身上找,如果找不到就到对应类的原型上找(这里是child类的原型),如果这时候还是找不到就到父级(这里是parent)的原型上找,因为child.prototype.__proto__=parent.prototype。这里就有问题了,他不会到parent的内部找吗?
大晚上突然想到个问题,用手机打的...电脑关了,所以没有去验证会不会去父类的内部查找.....先来问问....如果会去父类内部查找,又是什么原理呢....
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我们说obj是child的实例,只是一种方便的说法,实际上child是构造函数,构造函数是不参与原型链继承的,它只是一个函数,只是起一个new实例的作用,没有继承到原型的任何属性。
obj = new child()
这一句,new出来的obj立即继承了child.prototype;同理child.prototype= new parent()
,child.prototype继承了parent.prototype。所以这条原型链是这样的:
obj(child实例) <= child.prototype(new parent赋值的,也就是parent的实例) <= parent.prototype <= Object.prototype
你把原型链看成父子链吧……构造函数只是妈妈,把孩子生出来而已……
你所说的到parent内部去找是个什么意思?
属性查找时,先到当前对象找,找不到就到原型对象中去找,原型对象中还找不到,就在下一层到原型对象的原型对象去找,一直到Object.prototype,查找结束,还没找到返回undefeind
prototype指向的也是一个对象
例子
你这弯绕多了就会晕,其实就是obj 相当于child的proptype的原型对象,child的proptype原型对象来自parent的实例也就是parent的proptype原型对象。共享属性情况下。。那还不是想要啥有啥
不会,你自己都写了:
所以可以认为child类的原型继承了parent的prototype属性所引用的对象,而非继承parent本身。要不然怎么能叫构造函数呢。
构造函数:是一个函数,是用来生成实例的。
原型:是一个属性集合,是专门为属性共享而生的。
两个东西职责完全不同(虽然在JS中一切皆对象),前者用来把实例产生出来,后者用来给实例添加共享的属性。所以凭什么要到构造函数里面找属性?
另一个角度看:如果与其他面向对象语言类比一下,构造函数就像“类(class)”,构造函数的属性就像类变量(或类方法),原型的属性就像实例变量(或实例方法)。这样一来,某个实例对象去找属性时肯定要到原型上去找。