请老师解答下下面的问题

来源:5-4 继承

weixin_慕村1291783

2020-12-18 09:05:55

# 具体遇到的问题

# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

class A{

    

};

class B extends A{


}


let a=new A();

let b=new B();


console.log(a.__proto__===A.prototype);


console.log(A.prototype.__proto__===Object.prototype);

console.log(B.__proto__===A);  //为什么构造函数会有__proto__,构造函数应该是prototype属性啊?

//而且老师讲的原型链继承,在es6类中好像行不通打印B.prototype===a是false,

//再请老师解释一下类中继承的原型链关系,以及B.__proto__===A的原因


写回答

2回答

好帮手慕久久

2020-12-18

同学你好,问题解答如下:

Class是构造函数的语法糖,它既有prototype属性也有__proto__属性,并且存在两条继承链,其中一条就是“子类的__proto__属性,表示构造函数的继承,总是指向父类”,因此B.__proto__ === A的结果为true。

同学这样答即可,更深的内容,就涉及到底层的原理代码了,建议同学以后工作再研究,那时候理解会更深,对同学的帮助会更大。

祝学习愉快!

0

好帮手慕久久

2020-12-18

同学你好,es6中的extends可以实现继承,但是它与之前学的构造函数原型继承是有区别的,它实现的继承,不只是通过原型链来完成的,主要有以下三种形式:

构造函数中的属性,通过复制完成继承

实例方法通过实例原型之间的原型链完成继承

构造函数的静态方法通过构造函数之间的原型链完成继承

所以不能用原型链来分析同学写的这个例子。

对于原型链继承,同学重点掌握构造函数的形式即可(课程中讲的)。es6到继承,不需要掌握这么深,简单了解一下即可。如果同学想扩展,可以自己搜索一下相关资料(意义不大,实际中不会使用)。

祝学习愉快!

0
heixin_慕村1291783
hp>面试题里面有这个,为什么B会有__proto__属性 而且 为什么会指向classA

h020-12-18
共1条回复

0 学习 · 15276 问题

查看课程