【轉】js中this用法

javascript中的this

譯:理解並掌握 JavaScript 中 this 的用法javascript

關鍵

只有一個對象調用了包含this函數時,this才被賦值,而且所賦的值只依賴於調用了包含this函數的對象java

使用原則

  1. this永遠指向一個對象,而且擁有着個對象的值閉包

  2. 在嚴格模式下,在全局做用域中和匿名函數中,this指向undefinedapp

  3. this在一個函數內出現的時候,this指向調用這個函數的對象函數

易錯場景

  1. 包含this的方法被看成回調函數this

    $("button").click(callback);

    期待this指向:包含該方法的對象code

    實際this指向:調用了回調函數的對象對象

    解決辦法:bindip

  2. this出如今閉包內作用域

    ...
        example: function(){
            [1,2,3,4].forEach(function(item){
               this.test(item)
           })
       }
           ...

    期待this指向:外層函數的this指向

    實際this指向:undefined或者全局對象

    解決辦法:使用另一個變量保存this

  3. 把包含this的方法賦給一個變量

    var user = {
           name: 'hhh',
           sayName: function(){
               console.log(this.name);
           }
       }
       var test = user.sayName;
       test();//  全局變量的this

    期待this指向:包含該方法的對象

    實際this指向:包含該變量的對象

    解決辦法:bind

  4. 借用包含this的方法

var user1 = {
        name: 'hhh',
        sayName: function(){
            console.log(this.name);
        }
    }    
    var user2 = {
        name: 'ggg'
    }
    user2.ggg = user1.sayName();//

期待`this`指向:借用`this`方法的對象

實際`this`指向:包含該`this`方法的對象

解決辦法:`apply`

this的使用是一個常常容易出錯的地方,可是隻要把握一個原則,即

this老是指向調用包含this的方法的對象

相關文章
相關標籤/搜索