2013-02-28 42 views
1

哪個最好?設置一個變量並將其傳遞給調用,或者每次再次設置var。我想要self = this(即Slider obj)的一致性。設置變量並傳遞給函數或重新設置變量?

編輯答案:我知道我可以使用this但我與其他團隊成員的工作,並已同意的一致性在任何時候都引用對象時使用self

因此,這是更好的:

Slider = { 
    init: function() { 
     var self = this, 
     foo = $('.someElement'); 

     self.bindEvent(self); 
    }, 

    bindEvent: function(self) { 
     self.foo.on('click', self.wasClicked(self)); 
    }, 

    wasClicked: function(e, self) { 
     e.doSomething(); 
     self.done(); 
    } 
}; 

或者這樣:

Slider = { 
    init: function() { 
     var self = this, 
     foo = $('.someElement'); 

     self.bindEvent(); 
    }, 

    bindEvent: function() { 
     var self = this; 
     self.foo.on('click', self.wasClicked); 
    }, 

    wasClicked: function(e) { 
     var self = Slider; 
     e.doSomething(); 
     self.done(); 
    } 
}; 
+0

在'wasClicked'中只需要'self',其他情況下使用'this'。另外,你不能在對象中調用像這樣的Slider.init()。我相信你想要一個構造函數。 – bfavaretto 2013-02-28 17:05:37

+0

我知道我可以使用'this',但我與其他團隊成員一起工作,並且一致同意在任何時候引用對象時都使用self。此外,我的初始通話是一個錯字。 – 2013-02-28 17:07:39

回答

1

根據第一個示例,如果您爲綁定目標使用參數,則您的代碼更具可重用性。例如:

bindEvent: function(target) { 
    target.onclick = function() { alert(target + " was clicked"); }; 
} 

bindEvent()現在可以通過其它的函數調用,以及目標比self以外的東西。在您當前的Slider對象中,只需要調用init()即可,將來您可能會最終爲Slider添加功能,該功能將從該功能的附加可重用性中受益。在那個時候,你可以避免重寫函數,或者更糟的是,爲新的用例創建一個基本上重複的函數。

self不是目標的情況下,僅僅是對父級的引用,這兩個示例都沒有問題。如果你的函數已經有一個冗長的參數列表,那麼在函數內部設置self而不是將它作爲參數傳遞是一個好主意。許多爭論使得難以理解,重構和測試代碼。

0

你只需要selfwasClicked,在其他情況下使用this

Slider = { 

    init: function() { 
     foo = $('.someElement'); 
     this.bindEvent(); 
    }, 

    bindEvent: function() { 
     this.foo.on('click', this.wasClicked); 
    }, 

    wasClicked: function(e) { 
     var self = Slider; 
     e.doSomething; 
     self.done(); 
    } 

} 

Slider.init(); 

關於你的編輯:在第一個選項中,事件處理程序不起作用,因爲你是e立即調用而不是傳遞參考。你必須修改方法來返回一個函數。

+0

我更新了問題。初始通話是一個錯字。 – 2013-02-28 17:09:10