javascript 之 this(2)

this全面解析

调用位置:函数在代码中被调用的位置(而不是声明的位置)

function baz(){
    console.log('baz');
    bar();
}

function bar(){
    console.log('bar');
    foo();
}

function foo(){
    debugger; //断点调试
    console.log('foo');
}

baz();

绑定规则

  1. 默认绑定:独立函数调用

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

  2. 隐式绑定:调用位置是否有上下文对象,或者说是否被某个对象拥有或者包含

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

  3. 显示绑定

  4. new 绑定

优先级

1. 存在 new 绑定的话,this绑定的是新创建的对象
    var bar = new foo();

2. call apply(显示绑定)或者硬绑定调用,this绑定的是指定的对象
    var bar = foo.call(obj2);

3. 存在某个上下文对象中调用(隐式绑定),this绑定的是那个上下文对象
    var bar = obj1.foo();

4. 默认绑定
    var bar = foo();

绑定例外

this 词法

箭头函数会继承外层函数调用的this 绑定(self = this)

function foo(){
    return (a) => {
        console.log(this.a);
    }
}
var obj1 = {
    a:1
}
var obj2 = {
    a:2
}
var bar = foo.call(obj1);
bar.call(obj2);

转载于:https://my.oschina.net/u/1447694/blog/1560114

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值