[英]Set variable and pass to function or re-set variable?
哪個最好? 設置一個變量並將其傳遞給調用,或者每次都重新設置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();
}
};
根據第一個示例,如果將參數用作綁定目標,則代碼將更可重用。 例如:
bindEvent: function(target) {
target.onclick = function() { alert(target + " was clicked"); };
}
現在, bindEvent()
可以被其他函數調用,並以self
以外的其他對象為目標。 雖然在當前的Slider對象中僅需要通過init()
調用它,否則將來您可能最終會向Slider添加功能,這將受益於此功能的可重用性。 到那時,您可以避免重寫函數,或者更糟的是為新用例創建一個本質上重復的函數。
在self
不是目標的情況下,僅引用父母,兩個例子都不錯。 如果您的函數已經接受了很長的參數列表,則在函數內部設置self
而不是將其作為參數傳遞通常是個好主意。 許多參數使理解,重構和測試代碼變得更加困難。
你只需要self
在wasClicked
,在其他情況下,使用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();
關於您的編輯:在第一個選項中,事件處理程序將不起作用,因為您是立即調用它而不是傳遞引用。 您必須修改方法以返回函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.