理解js bind和this

  1. js中只有两大类数据类型,即基本数据类型(Number, String, Boolean, Null, undefine, symbol)和引用数据类型(Object)。Object可以用符号{}来表示,比如函数的函数体function(){}也是一个Object。所有的运行环境(context)本质上都是在一个Object的内部,而bind方法则是将一个函数绑定为一个Object的属性,也就是绑定到一个Object的context范围内。

  2. this指的是调用该方法的对象

    class A{
        constructor(){
            this.func = this.func.bind(this)
        }
        
        func(){
            ...
        }
    }
    

    在es6 class中,当我们在constructor中写this.func = this.func.bind(this)的时候,第一个this.func指向的是constructor的context,而调用constructor方法的就是class Object,简单来说:

    ? <- { this }

    this指的就是它前面和后面的这两个花括号所包含的范围的调用者

  3. 回调函数的this

    回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

    即,回调函数的this需要搞清楚是谁调用了它,this就指向谁

  4. 箭头函数没有自己的this,箭头函数中的this指的是它上上层{}的范围

    ? <- { ()=>{ this } }

你可能感兴趣的:(前端)