哪个最好?设置一个变量并将其传递给调用,或者每次都重新设置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 :(得分:1)
如果您根据第一个示例使用绑定目标的参数,则代码更可重用。例如:
bindEvent: function(target) {
target.onclick = function() { alert(target + " was clicked"); };
}
bindEvent()
现在可以被其他函数调用,并定位self
以外的其他内容。在您当前的Slider对象中,它只需要由init()
调用,将来您最终可能会向Slider添加功能,这些功能将受益于此函数的可添加的可重用性。在那个时候你可以避免重写函数,或者更糟糕的是为新的用例创建一个基本上重复的函数。
在self
不是目标的情况下,仅仅是对父项的引用,任何一个例子都可以。如果你的函数已经有一个它接受的冗长的参数列表,那么在函数内部设置self
而不是将它作为参数传递通常是个好主意。许多论点使得理解,重构和测试代码变得更加困难。
答案 1 :(得分:0)
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();
关于你的编辑:在第一个选项中,事件处理程序将不起作用,因为你正在调用它而不是传递引用。您必须修改方法以返回函数。