javascript学习 - bind()方法及this指向问题

首先 在类中的方法中。this 要看是谁调用的。如果是实例调用的,那么这个this就是这个实例。如:

class Student {
    constructor(flag) {
        this.flag = flag
    }

    mark(){
        console.log(this);  
    }
}
const s1 = new Student('jack')
s1.mark()

结果:

 

如果不是实例调用的,类中的方法默认会开启严格模式,this会变成undefined。不开启严格模式,this是Window。

class Student {
    constructor(flag) {
        this.flag = flag
    }

    mark(){
        console.log(this);  
    }
}

const s1 = new Student('jack')
const out = s1.mark
out()

结果:

可以通过bind方法来绑定,首先看一下这个方法

class Student {
    constructor(flag) {
        this.flag = flag
    }

    mark(){
        console.log(this);  
    }
}

const s1 = new Student('jack')
const out = s1.mark
out()

const x = s1.mark.bind(s1);
x();

研究了好久也没有理解这个方法的含义。其实这个要从后往前看,首先分为是谁来调用(X),入参是什么(Y),返回的是什么(Z)。

根据定义我们可以知道返回的是一个函数/方法(即Z是一个函数)。

这个bind其实就是把一个对象(Y)的一个方法(X)提取出来(Z)最后是一个方法

所以这里就是把 Student对象实例变量s1  的mark方法  绑定到变量x里。

 

posted @ 2022-10-28 18:33  Oze_waka  阅读(261)  评论(0)    收藏  举报