js原型链继承问题求解

发布于 2022-09-02 10:35:24 字数 358 浏览 13 评论 0

现在有js的两个类(就是两个函数),一个父类,一个子类,子类继承了父类,通过child.prototype= new parent()。来继承.然后再实例化一个子类,var obj = new child().
这时候在obj这个对象上查找一个属性的时候,首先在自己身上找,如果找不到就到对应类的原型上找(这里是child类的原型),如果这时候还是找不到就到父级(这里是parent)的原型上找,因为child.prototype.__proto__=parent.prototype。这里就有问题了,他不会到parent的内部找吗?
大晚上突然想到个问题,用手机打的...电脑关了,所以没有去验证会不会去父类的内部查找.....先来问问....如果会去父类内部查找,又是什么原理呢....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

慕烟庭风 2022-09-09 10:35:24

我们说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

你把原型链看成父子链吧……构造函数只是妈妈,把孩子生出来而已……

我喜欢麦丽素 2022-09-09 10:35:24
  1. 你所说的到parent内部去找是个什么意思?

  2. 属性查找时,先到当前对象找,找不到就到原型对象中去找,原型对象中还找不到,就在下一层到原型对象的原型对象去找,一直到Object.prototype,查找结束,还没找到返回undefeind

  3. prototype指向的也是一个对象

例子

function Parent(){
    this.superName='Parent';
}
Parent.prototype={
    otherName:'Other',
};
function Child(){
    this.subName='Child';
}
Child.prototype=new Parent();

var child=new Child();
console.log(child.subName);//输出 Child
console.log(child.superName);//输出 Parent
console.log(child.otherName);//输出 otherName
console.log(child.unName);//输出 undefined
无所谓啦 2022-09-09 10:35:24

你这弯绕多了就会晕,其实就是obj 相当于child的proptype的原型对象,child的proptype原型对象来自parent的实例也就是parent的proptype原型对象。共享属性情况下。。那还不是想要啥有啥

此生挚爱伱 2022-09-09 10:35:24

不会,你自己都写了:

child.prototype.__proto__=parent.prototype

所以可以认为child类的原型继承了parent的prototype属性所引用的对象,而非继承parent本身。要不然怎么能叫构造函数呢。

呆橘 2022-09-09 10:35:24
  • 构造函数:是一个函数,是用来生成实例的。

  • 原型:是一个属性集合,是专门为属性共享而生的。

两个东西职责完全不同(虽然在JS中一切皆对象),前者用来把实例产生出来,后者用来给实例添加共享的属性。所以凭什么要到构造函数里面找属性?

另一个角度看:如果与其他面向对象语言类比一下,构造函数就像“类(class)”,构造函数的属性就像类变量(或类方法),原型的属性就像实例变量(或实例方法)。这样一来,某个实例对象去找属性时肯定要到原型上去找。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文