1. class Person {
    2. constructor(name, age,sex){
    3. //constructor 上的属性 是实例对象的属性
    4. this.name =name;
    5. this.age =age;
    6. this.sex =sex;
    7. //
    8. this.speak = this.speak.bind(this);
    9. }
    10. speak(){
    11. // speack 方法是 原型对象的属性,供 实例对象调用。
    12. //如果初始化的时候实例 不绑定 this.speak = this.speak.bind(this) 打印出来就是undefined
    13. // 如果绑定了 就this 就指向person 这个实例
    14. console.log(this);
    15. console.log(`大家好,我叫${this.name},今年${this.age}岁了,----------- `)
    16. }
    17. }
    18. class Student extends Person {
    19. // 子类 可以继承父类上的实例对象的属性 也能继承父类原型对象的属性
    20. constructor(name,age,sex,grand){
    21. super(name,age,sex);
    22. this.grand =grand;
    23. }
    24. speak(){
    25. console.log(`大家好,我叫${this.name},今年${this.age}岁,是一名${this.sex}生,今年读${this.grand}`)
    26. }
    27. }
    28. const p2 =new Person('李四',15,"男",'高一');
    29. // 为啥时实例不绑定 this.speak = this.speak.bind(this); 就是普通函数赋值
    30. // 绑定了 就是 赋值也是绑定了 this
    31. const res = p2.speak
    1. 解答:给变量赋值一个函数
    2. 首先 已经定义了一个函数speak 赋值给一个变量 在你为说明绑定this的情况下 是不会给绑定this的
    3. const res = p2.speak 其中speak 是p2的对象的一个普通函数(不包括箭头函数) 当这个speak未绑定
    4. this的时候直接赋值给res 此时这个this 是undefined 因为类里面开启了严格模式 如果不在类里面的函数
    5. 指向了window
    6. 其次 就是我已经说明 用bind 绑定了this的时候 在赋值 被赋值的变量里面的this 就是指向bind绑定的this