正在回答
2回答
同学你好,如下这样写,与在constructor中定义name是一样的(学法1与写法2等价):
所以你会看到name也被添加到实例自身上了,因此super.name是undefined。
这是class内部代码帮我们实现的,只有定义的方法,才会被追加到原型对象上。
同学注意一下这个细节即可。
祝学习愉快!
好帮手慕久久
2021-02-01 17:11:28
同学你好,解答如下:
由于类和之前的构造函数很像,所以老师结合构造函数,给同学讲解。本题中,类Person对应如下构造函数:
从上图可以看到,name是通过this添加到实例上面的,即name处于实例自身上(构造函数中,使用this定义的属性是实例的属性)。speak这个方法,并不在实例自身上,它是在父类的原型对象prototype上(Person.prototype.XXX)。实例之所以能够访问到speak方法,并不是因为实例自身有该方法,而是因为实例可以通过原型链找到父类原型对象上的speak方法。
由于constructor中的super指向的是父类的原型对象prototype,所以可以通过super直接访问到speak方法。但是name不在原型对象prototype上,所以使用super访问不到name。
可以通过打印验证name在实例自身上:
而speak方法,则是在原型链上:
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星