js中this的绑定情况以及如何改变this的指向

友情提示:this只有在执行的时候才能确认,定义时无法被确认
this的介绍:

this是一个关键字,类似于变量但不是变量,也不是属性名,JavaScript的语法不允许给this赋值。和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果嵌套函数作为方法调用,其this的值指向调用它的对象。如果嵌套函数作为函数调用,其this值不是全局对象就是undefined(非严格模式下是全局对象(即window对象),严格模式下是undefined)。很多人误以为调用嵌套函数时,this会指向调用外层函数的上下文。如果你想访问这个外部函数的this值,需要将this的值保存在一个变量中,这个变量和内部函数都同在一个作用域内。
this的绑定:

  1. 默认绑定(严格模式下,不能将全局对象用于默认绑定)

    没有明确隶属对象(明确主人)的函数,被直接执行,一般都是window
    js中this的绑定情况以及如何改变this的指向

  2. 隐士绑定

    有所属对象的函数,被执行时,一般是当前函数的所属对象;隐士绑定中存在着隐士丢失。
    js中this的绑定情况以及如何改变this的指向

    隐士丢失:不管这个函数是谁的,有没有所属对象,只要作为参数传递,通过参数执行这个函数(参数中的这个函数称为回调函数),一般情况下都是window
    js中this的绑定情况以及如何改变this的指向
    注意:不是所有的回调函数中的this都指向window,某些特殊情况下(在事件监听式绑定中),被系统修改了
    js中this的绑定情况以及如何改变this的指向

  3. new绑定

    如果函数或者方法调用之前带有关键字new,它就构成构造函数调用。对于this绑定来说,称为new绑定。
    js中this的绑定情况以及如何改变this的指向

    new关键字的内部执行原理:

    1> 自动创建一个新对象,在内存中

    2> 改变了函数内部的this的指向,改成了第一步创建的新对象

    3> 执行函数内部的代码,并且将第一步创建的对象的__proto__与实例的prototype进行了关联

    4> 检查当前函数是否主动返回对象,如果没有,则返回第一步创建的新对象

  4. 显示绑定

    采用call()和apply(),通过传入一个对象(若为基本类型,会被封装函数转为对象),将this绑定到该对象。
    如何改变this的指向

    this在函数中,修改函数的指向,配合函数的方法实现修改:以下是几种方法的使用方式:
    call方法的使用方式

    语法:函数名.call()

    参数:第一个参数是,修改之后的this指向;后面的所有参数:表示函数中正常传递的实参,可以省略,也可以传多个

    功能:修改原函数中的this指向,但是只是在当前call执行的时候,修改了

    返回值:元函数的返回值

    是否修改了原函数:没有修改
    js中this的绑定情况以及如何改变this的指向
    js中this的绑定情况以及如何改变this的指向
    apply方法的使用方式:

    语法:函数.apply()

    参数:第一个参数是:修改之后的this指向

    第二个参数是:数组,这个数组中所有的数据,被自动展开之后,整体传入了原函数,可以省略,省略时为undefined

    功能:修改原函数中的this指向,但是只是在当前apply执行的时候修改了

    返回值:原函数的返回值

    是否修改了原函数:没有修改原函数
    js中this的绑定情况以及如何改变this的指向
    js中this的绑定情况以及如何改变this的指向
    bind方法的使用方式:

    语法:函数名.bind()

    参数:第一个参数是:修改之后的this指向

    后面的所有参数:表示想函数中正常传递的实参,可以省略,也可以传多个

    返回值:修改了this之后的新函数

    是否修改了原函数:没有修改
    js中this的绑定情况以及如何改变this的指向
    js中this的绑定情况以及如何改变this的指向

以上是 js中this的绑定情况以及如何改变this的指向 的全部内容, 来源链接: utcz.com/a/60204.html

回到顶部