请老师解答下下面的问题
来源: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。
同学这样答即可,更深的内容,就涉及到底层的原理代码了,建议同学以后工作再研究,那时候理解会更深,对同学的帮助会更大。
祝学习愉快!
好帮手慕久久
2020-12-18
同学你好,es6中的extends可以实现继承,但是它与之前学的构造函数原型继承是有区别的,它实现的继承,不只是通过原型链来完成的,主要有以下三种形式:
构造函数中的属性,通过复制完成继承
实例方法通过实例原型之间的原型链完成继承
构造函数的静态方法通过构造函数之间的原型链完成继承
所以不能用原型链来分析同学写的这个例子。
对于原型链继承,同学重点掌握构造函数的形式即可(课程中讲的)。es6到继承,不需要掌握这么深,简单了解一下即可。如果同学想扩展,可以自己搜索一下相关资料(意义不大,实际中不会使用)。
祝学习愉快!
相似问题