this指向

1.this

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

function fn(){
    console.log(this)
}
fn() //window
obj.fn // obj

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
setTimeout(o.b.fn,0)
setInterval(o.b.fn,1000)

3.强行改变this指向

3.1 call()

格式:

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

特点:

立即执行当前函数。

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

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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值