this指向

本文详细介绍了JavaScript中this的指向规则,包括全局环境、对象方法、事件处理和定时器中的行为。同时,讲解了如何通过call、apply和bind方法来改变或设定this的指向。此外,还给出了这些方法在实际编程中的应用场景,如数组参数处理和函数绑定。
摘要由CSDN通过智能技术生成

this指向

1.this

在每一个函数中,都有一个内置的变量 this。大部分情况下,这个this存储是当前函数的调用者。this的指向在函数定义的时候是确定不了的。只有函数执行的时候才能确定this到底指向谁

2.几种情况

1.全局变量中指向window
function show(){
	console.log(this);//window
}
show()
2.在对象的方法中指向调用者
	var o = {
        a:10,
        b:{
            a:12,
            fn:function(){
                console.log(this.a);//12
            }
        }
    }
    o.b.fn();
var o = {
        a:10,
        b:{
            a:12,
            fn:function(){
                console.log(this.a);//undefined
                console.log(this);//window
            }
        }
    }
    // o.b.fn();
    var j = o.b.fn;
    window.j();
3.在事件绑定中,指向目标对象。
var box = document.getElementById("box");
box.onclick = function(){
    console.log(this);  
}
4.定时器处理函数中,指向window
 var obj = {
            a: 10,
            b: {
                a: 20,
                fn: function() {
                    console.log(this.a);//undefined
                    console.log(this);//window

                }
            }
        }
        setTimeout(obj.b.fn, 1000);

3.强行改变this指向

3.1 call()

格式:

函数名.call(obj,arg...);
//obj : 函数内部的this指向
//arg...:从第二个参数开始,为函数的参数。
 function fn(a, b) {
            console.log(this);//obj
            console.log(a + b);

        }
        var obj = {}
        fn.call(obj, 10, 20)

在这里插入图片描述

特点:

立即执行当前函数。

【注意】定时器处理函数或者事件处理函数不适用

3.2 apply()

格式

//obj : 函数内部的this指向
//arr:一个数组或者伪数组,里面的每一个元素会依次传递给函数。
函数名.apply(obj,arr);

特点:

立即执行当前函数。
【注意】定时器处理函数或者事件处理函数不适用
** 应用:**可以以数组的形式给某些功能函数传参。

var arr = [10,5,30,-15,6,40]
// var max = Math.max(10,5,30,-15,6);
var max = Math.max.apply(null,arr);
console.log(max);
3.3 bind()

格式:

//obj : 函数内部的this指向
//arg:从第二个参数开始,依次为函数传递参数。
函数名.apply(obj,...arg);

特点

不会立即执行函数,会返回一个新的函数,该函数内部的this指向为传入的对象。

    function fn(x,y){
        console.log(x+y);
        console.log(this);
    }
    var obj ={

    }
    fn(10,20)
    var res = fn.bind(obj,10,20);
    res();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值