2015-12-27 64 views
1

在我的反應原生代碼中,我在模塊的多個位置使用了bind(this)var self = this;bind和var self之間的區別= this?

兩者都解決了在正確的地方解決this關鍵字的問題。

這裏是我的代碼(2代碼,以執行相同的功能) -

  1. 使用bind(this)

    retval.then(function (argument) { 
        console.log("argument"+JSON.stringify(argument)); 
        this.stateSetting(argument); 
    }.bind(this)); 
    
  2. 使用var self = this

    var self = this; 
    retval.then(function (argument) { 
        console.log("argument"+JSON.stringify(argument)); 
        self.stateSetting(argument); 
    }); 
    

缺點如果他們都做同樣的工作,我很想知道什麼是正確的做法?使用其中一個還是有問題?還是有更好的方法來做到這一點?

+1

這兩個工作正常。我會盡量在應用程序或至少一個模塊中保持一致。 –

+2

ES6箭頭功能是更好的方法。 – Oriol

+0

感謝Robert :)只是想知道,如果我做了'''if if(self === this)''''返回true。那麼,有沒有辦法摧毀自我?如果這是我可以完成的一個對象 - '''self = {}'''。在這種情況下,我應該將自我指向null嗎? – bozzmob

回答

5

鑑於您的目標是實現ES2015的Node.js,您最好使用箭頭函數。 箭功能有所謂的lexicalthis,這意味着一個箭頭函數變量this被視爲像一個正常的變量,將closed over當您創建功能。

所以,你的代碼就變成了:

retval.then((argument) => { 
    console.log("argument"+JSON.stringify(argument)); 
    // "this" will inherit the value of the outside scope 
    this.stateSetting(argument); 
}); 

如果定位ES5(舊的瀏覽器),那麼我會贊成.bind風格,而不是var self = this。它更加結構化,更接近於功能性方法,這使得代碼更容易推理,就像您通過使用promise所發現的一樣。它也似乎是slightly more performant

相關問題