深入理解JavaScript:函数中的this指什么?

this到底是什么?

函数被调用时的位置(是动态的!)
(箭头函数不在此范围,因为它的this是函数定义时的上下文,是静态的!)

判断规则

1.如果是在new中调用,this则为新创建的对象
2.通过call,apply调用,this是之前定的对象(第一个参数)
(注意 若第一个参数是null,undefined则执行第四条判断规则)
3.在么某个上下文中调用,this是该上下文对象
4.上面3个都不是的话,this是全局对象(严格模式是undefined)

速记

1.new(该函数使用new构造调用了)
2.显式(该函数显示使用call,apply调用)
3.隐式(该函数为某个对象的属性值,作为对象的属性方法调用)
4.默认(无特征,直接调用了)

加深理解

看代码吧~

new绑定

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

显式绑定

function foo(a){
    this.a = a;
}
var obj = {a:2};
foo.call(obj); // 2

隐式绑定

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

// trap 2or22???
function foo(){
    console.log(this.a);
}
var obj1 = {
    a: 2,
    foo: foo
};
var obj2 = {
    a: 22,
    obj1: obj1
};
obj2.obj1.foo(); // tip 函数foo是谁的属性值呢?

绑定默认

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

常规考点~

// trap 0or1??? why? 如何打印另外一个值~
function foo(){
    setTimeout(function(){
        console.log(this.a);
    },1000);
}
var obj = {a:1};
var a = 0;
foo.call(obj); // tip 包含this的函数究竟是在哪里被执行的呢?0和1的区别在于?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值