感觉class的super用作对象还是有点绕,请教大佬给一个透彻的解释
这是在看阮一峰老师的es6中关于类遇到的问题。代码如下,虽然答大体意思我知道,不过不是太能理解super.x输出为undefined。
class A {
constructor() {
this.x = 1;
}
}
class B extends A {
constructor() {
super();
this.x = 2;
super.x = 3; //super.x.call(this),即为this.x。但属性没有call方法
//super.x即为A.prototype.x,A中的x为实例的属性,而实例的属性和方法都无法在原型上访问到(能懂)
console.log(super.x); // undefined 为什么这里读到的一定是A.prototype.x,而不会是this.x???
console.log(this.x); // 3
}
}
let b = new B();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
翻翻红宝书就知道了
就是 call , apply 的应用罢了
super.x = 3 这个是数据负值,内部调用了setter方法,此时this是子类的实例,相当于给B的实例的x属性赋值了。而supper.x 这是取值,实际上是取 A.prototype.x 的值,所以返回undefined。不知道这样理解是否核合适
感觉目前还是水平欠缺。。。