2012-10-04 45 views
9

可能重複:
What underlies this JavaScript idiom: var self = this?差異爲使用他們的

我很困惑,當利用自我,這在JavaScript。
我知道這個是指當前的上下文和自我是指當前窗口。
由於我正在鈦開發應用程序。我想知道什麼時候使用自我這個 或是否有任何概念自我鈦開發。

這裏是我在鈦CommonJS的模塊

var auth = require('/SDKTest/auth'); 
var nodeAPI = require('/SDKTest/nodeAPI'); 
function myAPI() { 
    this.auth = auth; 
    this.nodeAPI = nodeAPI; 
    return this; 
    } 
module.exports = myAPI; 

此代碼工作正在做的示例代碼,但我可以用代替?和 而不是使用我可以創建一個命名空間,做這樣的事情:

function myAPI() { 
    var api = {}; 
    api.auth = auth; 
    api.nodeAPI = nodeAPI; 
    return api; 
    } 

兩種方法是可行的,但有什麼用使用這個在這裏

+0

參考 http://stackoverflow.com/questions/337878/js-var-self-this –

+0

我已經更新了我的問題增加了一個示例代碼那邊 –

回答

3

你的問題在一定程度上令人困惑,這就像問:我買蘋果還是西紅柿?答案是,這取決於你想要做什麼,因爲它們完全不同。

本質上講,你已經回答了你自己的問題在一定程度上,因爲你已經知道這兩者之間的區別:

  • this指當前上下文
  • selfwindow
function myAPI() { 
    this.auth = auth; 
    this.nodeAPI = nodeAPI; 
    return this; 
    } 
module.exports = myAPI; 

你在問你c改爲使用self。想一想,this允許你做什麼?它允許你引用上下文。什麼是上下文,當您撥打module.exports()時,它是module。而module最有可能不會是window,所以不,你不能在這裏使用self

這是否回答這個問題?

第二個代碼示例似乎做了一些完全不同的事情。我不知道該怎麼做。

+0

@phantOm在第二個代碼我只是我的創造自己的自定義名稱空間,其中包含auth和nodeAPI對象 –

+0

@AjeetPratapMaurya是的,我明白了。事情是,它完全不同。如果你將這個分配給'module.exports',它會返回帶有屬性'auth'和'nodeAPI'的'module.exports()'* new *對象,而不是修改'module'本身,因爲它是第一個代碼呢。 – phant0m

8

self不是JavaScript關鍵字!程序員在定義類時始終使用對象自身的有效引用。

var Person = function() { 
    var self = this; 
    // private function 
    function say(what) { 
     alert(what); 
    } 
    self.fetchSomething = function() { 
     var xhr = Ti.Network.createHTTPClient({ 
      onload: function() { 
       // in this case 'this' is referencing to xhr!!! 
       say(this.responseText); 
      } 
     }); 
     xhr.open('GET', 'http://www.whatever.com'); 
     xhr.send(); 
    } 
    return self; 
} 
var p = new Person(); 
p.fetchSomething();