美文网首页
JavaScript中的this指向问题

JavaScript中的this指向问题

作者: forever_提拉米苏 | 来源:发表于2020-07-07 22:34 被阅读0次

    1、在全局作用域下, this指向的是window对象

    2、在普通函数作用域下

    在非严格模式下,this的指向依旧是window对象

    在严格模式下,this的指向是undefined

    3、构造函数调用, this 指向是实例对象

    4、对象方法调用,this 指向该方法所属的对象

    5、通过事件绑定的方法, this 指向绑定事件的对象

    6、在定时器函数下, this 指向 window

    7、更改this指向的三个方法

    我们知道在普通函数里this指向window,下面提供三种方法改变this的指向,分别为:call()、apply()、bind()

    差别:

    call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象。

    call和bind 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔。apply 的所有参数都必须放在一个数组里面传进去。

    bind 返回的是一个新的函数,你必须调用它才会被执行,所以多了一个括号。

    8、改变this指向的第四种方法

    除了上面所说的三种方法外,还有一种方法可以使this的指向变得不一样,那就是箭头函数。

    x => x*x

    箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。如下面的例子:

    普通函数与箭头函数

    我们可以看出在箭头函数fn中this的指向与变量b的指向相同,我们可以理解为箭头函数中的this继承的是父执行上下文里面的this,也就是说跟父级中的this指向相同。

    所以,箭头函数中this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。

    相关文章

      网友评论

          本文标题:JavaScript中的this指向问题

          本文链接:https://www.haomeiwen.com/subject/frkaqktx.html