JavaScript
对于我们刚学习函数的菜鸟来说,this的指向经常让我们头晕目眩。是一个难点。今天小编就把自己学习过程中判断this指向的方法分享给大家。
首先我们要记住,this指向当前执行环境的对象。同一个函数中的this的取值跟调用方法有关,调用方法不同this可能就不同。
其次,判断技巧就是:
如果使用括号调用,查看括号前面是不是函数,如果是,继续查看函数前有没有点,如果有点,this为点前面的变量。
如果是使用函数名.call(this,实参列表)或函数名.apply(this,实参数组)进行调用,就要看情况分析了。因为这里的this指的是为当前调用的函数中的this赋值。
让我们来举例说明一下
先来看一个简单的例子
function foo(){
console.log(this);
}
var obj = {name:“lisa”,age:15}
1.foo(); //foo中的this指向全局环境对象,window/global
2.obj.foo(); //foo中的this指向obj
3. [1,2,3,foo,4]3 // foo中的this指向数组
再来看一个比较复杂的例子
因为myForEach是被arr调用的,括号之前是函数,函数之前有点,所以myForEach函数中的this指向arr。第四行和第五行的this它们都包含在myForEach函数中,所以它们都指向arr。
第十行的this是包含在function(item,i)中的,但是由于这个函数是一个回调函数,它是赋值给handler的,所以要看这个函数this指向谁就得看handler中的this指向谁。而handler是通过.call来调用的,这就是我们说的第二种情况,要看情况分析了。因为.call的第一个this是给handler当中的this赋值的,我们只要知道.call的第一个this指向谁就等同于知道handler的this指向谁。上面我们已经知道.call的第一个this指向的是arr,所以handler的this也指向arr,也就是说第十行的this也指向arr。
希望通过以上我的分析可以给小伙伴们解答疑惑~
教你如何判断this指向谁
最新推荐文章于 2023-03-02 14:46:14 发布