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