JavaScript中this的指向问题

this一般只有在被调用的时候才会进行绑定,并不是在声明时绑定,this的指向与声明位置无关,至于调用或者执行时有关。

默认绑定

function foo(){ 
console.log(this.a); 
}
var a=2; 
foo();//2

foo()函数直接调用不带任何修饰的引用一般都为默认绑定,而this一般默认指向window。

严格模式下,则为undefined。

隐式绑定

function foo(){
            console.log(this.a);
        }
        var obj={
            a:3,
            foo:foo,
        }
        var a=2;
        obj.foo();   //3

obj.foo()因为是obj调用的foo函数,所以这时this绑定了obj,this.a也当然是指obj对象里的a。所以结果为3。

隐式绑定会出现一个问题———隐式丢失

 function foo(){
            console.log(this.a);
        }
        var obj={
            a:3,
            foo:foo,
        }
        var a=2;
        var bar = obj.foo;
        bar();//2

bar是obj.foo函数的一个引用,引用的本身是obj.foo,不是foo()函数,所以this采取默认绑定,指向window,所以值为2;

显式绑定

使用call()和apply()方法,这两种方法的第一个参数为一个对象,this会自动绑定到该对象上。

 function foo(){
        console.log(this.a);
    }    
    var obj={
        a:3,
        foo:foo,
    }
    var a=2;
    foo.call(obj);

此例子用了call()方法,传入参数obj,this则被强制绑定到obj上,所以结果为3.

call()和apply()方法的区别:

apply()接收两个参数,第一个为this的绑定对象,第二个则为数组实例或者arguments对象。

call()方法第一个参数是this绑定的对象,其余参数必须直接传给函数

new绑定

1、构建新对象

2、改变this指向,使this指向当前新对象

3、给新对象添加属性

4、返回新对象

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值