2013-04-18 56 views
2

我知道「自我」的魔力。但是從nodejs看這個片段(不完整)。關於這個和javascript的自我

Socket.prototype.connect = function(options, cb) { 
...... 
    var self = this; 
    var pipe = !!options.path; 

    if (this.destroyed || !this._handle) { 
    this._handle = pipe ? createPipe() : createTCP(); 
    initSocketHandle(this); 
    } 

    if (typeof cb === 'function') { 
    self.once('connect', cb); 
    } 

    timers.active(this); 

    self._connecting = true; 
    self.writable = true; 
...... 
} 

這是我的理解,我們必須使用自我創建一個閉包。這裏沒有關閉這些行,但作者在將這個分配給自己後使用這兩個行。這有什麼區別嗎?

+0

我認爲它的使用只是因爲與其他代碼的約定和統一。在一個地方使用'this'可能只是一個疏忽。 – JJJ 2013-04-18 05:18:15

+0

因爲'self'設置爲'this',它們是同一個變量。我不確定作者爲什麼混合這兩個。 – 2013-04-18 05:24:35

回答

3

在你在這個特殊的代碼例子已經證明什麼,有沒有理由,甚至有self變量,因爲有可能需要訪問的this原值沒有其他的功能範圍。

一些開發人員有一致的方法或慣例來創建一個局部變量,如self,並將它賦值爲this,以便他們在需要時使用它(如果需要的話)。 self變量也可以最小化爲小於this,因爲它可以重命名爲一個字符的變量名稱,但不能重命名this

在任何情況下,如果刪除self並且在此特定方法中只使用this,則此處的功能不會受到影響。

我個人的慣例是隻定義self,如果它實際上需要這是我用於其他局部變量的相同邏輯,然後我只在需要它的閉包內使用它。

+0

代碼不完整。這個功能有關閉。我只是沒有發佈。所以創造自我是有道理的。 – 2013-04-18 05:39:12

+0

@AlvinCao - 如果在此方法內部定義了匿名回調函數,並且這些回調函數需要訪問'this'的原始值,那麼是的,這是將'this'的值賦給局部變量的常見設計模式,通常稱爲'self'或'that'或'me',以便在回調函數中'this'具有不同的值時,可以在回調函數中使用該局部變量來引用主機對象。 – jfriend00 2013-04-18 05:42:28

+0

謝謝@ jfriend00。但是我恐怕不會問使用自變量的慣例。我知道爲什麼。我在這樣的非關閉代碼中詢問爲什麼作者使用這兩個詞。我懷疑作者是否遵守任何約定來使代碼更清晰,因爲我多次看到這樣的代碼。 – 2013-04-18 05:54:48