JavaScript中关键字(this)

JavaScript中关键字(this)

//测试浏览器 chrome;

  1. 我的错误认识;
    1. 我一直以为this指代的是函数本身,当时写公用方法时,就用了this这个关键字,自己也不知道为什么要用,只是看到老师在用,自己就用了。一直以来概念都很模糊,直到现在还不是很清楚,只是把自己知道的总结下来,如有错误请指出,以免误人误己。谢谢!
  2. 默认绑定(default binding);
    1. 大家在控制台输入this这个关键字。可以看到输出的是window对象。
    2. 那是不是this===windowconsole.log(this===window)//true;
    3. 从上面两点大家看出什么了没?对的,this其实在默认的情况下创建的是全局变量;
     function foo(){
     this.name = 'zs';
     this.age = 18;
     }
     foo();
     console.log(age)//output:18
  1. 隐式绑定(implicit binding);
    1. 从列子里可以看出this指代的是b
    2. 结合default/implicit,可以看出this在函数里是代表全局变量,在Object时代表的是object;(不知道这样说对不?)
var b = {
       age:'20',
        obj:function(){
            console.log(this.age)//20
            console.log(this===b)//true
            console.log(this===Object)//false
        }
    }
    b.obj()
  1. 显示绑定(explicit binding);
    1. 通过call()和apply(),来指定作用域;(可以这么说不?)
 var age = 5;
    function foo(){
        console.log(this.age)//20
    }
    var b = {
       age:'20'
    }
    foo.apply(b)
  1. new 绑定(new binding);
var age = 5;
    function foo(age){
        this.age = age;
    }
   console.log(new foo(20))//20
  1. 优先级的比较;
    1. explicit and implicit;
      2.其它的就自己动手比较吧;
function foo(){
        console.log(this.age);
    }
    var obj1 = {
        age:'18',
        foo:foo
    }
    var obj2 = {
        age:'20',
        foo:foo
    }
    obj1.foo();//18
    obj2.foo();//20

    obj1.foo.call(obj2);//20
    obj2.foo.call(obj1);//18
    //可以看出显式绑定高于隐式绑定;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值