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