考试过程中有关于super和name属性的问题不是很明白,就把题目和解析都抄下来了,请老师解答一下
来源:4-1 ES6中class的继承
龍巛幽
2020-09-02 17:03:26
考试过程中有两道题不是很明白,就把题目和解析都抄下来了,请老师解答一下
——————————————————————分割线———————————————————
15. 多选题
学习了类表达式,使用类的表达式的方式书写如下代码,哪一项不能正确输出“imooc”?(选择两项)
let person = class p{
constructor(){
console.log('imooc')
}
};
new p();
参考解析:
A 这个类的名字是person而不是p,p这个名字是无效的,所以通过 new p() 会报错。
17.观察下如下代码,输出结果为?(选择一项)
let foo = class Foo {
constructor(){
this.name = 18;
}
}
let f = new foo();
console.log(foo.name);
参考解析:
正确答案为C,输出的是Foo。1、name属性输出的是类的名字。
2、如果类表达式中,类是有名字的,是类的名字,类没有名字的话,会是表达式中变量或者常量的名称。
——————————————————————分割线———————————————————
提问1:这两道题当中 15题说这个类的名字是person 也就是它赋值到的变量 而17题当中说name属性是Foo 不是foo 这是为什么?
——————————————————————分割线———————————————————
20.关于super关键字,下列说法正确的是?(选择一项)
A.super作为函数调用时,代表父类的构造函数
B.super中的this指向的是子类
C.在静态方法中访问super,指向父类的原型对象
D.在非静态方法中访问super,指向父类。
参考解析:
正确选项为A;
B:super中的this指向的是之类的this
C:非静态方法中,指向父类的原型对象
D:在静态方法中,指向父类。
——————————————————————分割线———————————————————
提问2:super中的this指向的是子类的this?那最终是指向什么?B选项中说的this指向子类啊,指向子类和指向子类的this有什么区别,可以用例子说明吗?
1回答
同学你好,问题解答如下:
1. 当使用let person = class p{}这种形式声明类时,比较特殊,此时实例化时,需要写成如下形式:

即new 关键字后面跟着的“类的名字”是person,而不是“p”,p是这个类的name属性,所以下一个类foo中,“foo.name”是获取的类foo的属性,值为Foo,它们对应关系如下:

而“如果类表达式中,类是有名字的,是类的名字,类没有名字的话,会是表达式中变量或者常量的名称”这句话的意思是如下:


这点是es6规定好的,同学记住即可。
2. super中的this代表的子类的this,它最终指向的是用子类实例化出来的实例:

所以super是指向子类的实例,而不是单纯的指向子类自身,所以B选项不够准确。还可以看下面的例子,如果super是指向子类的,那么实例化子类后(此时super方法会执行),子类上应该会有age属性,但实际并没有,如下:

同学试着理解一下。
如果我的回答帮到了你,欢迎采纳,祝学习愉快!
相似问题