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
    //可以看出显式绑定高于隐式绑定;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章