Javascript 设置变量并传递给函数还是重新设置变量?
哪一个最好?设置一个变量并将其传递到调用中,或者每次再次设置变量。我希望Javascript 设置变量并传递给函数还是重新设置变量?,javascript,jquery,design-patterns,modular,Javascript,Jquery,Design Patterns,Modular,哪一个最好?设置一个变量并将其传递到调用中,或者每次再次设置变量。我希望self=this(即滑块obj)保持一致性 编辑获取答案:我知道我可以使用此,但我与其他团队成员一起工作,并同意在任何时候引用对象时使用self的一致性 那么这是否更好: Slider = { init: function() { var self = this, foo = $('.someElement'); self.bindEvent(self);
self=this
(即滑块obj)保持一致性
编辑获取答案:我知道我可以使用
此
,但我与其他团队成员一起工作,并同意在任何时候引用对象时使用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();
}
};
您只需要单击
中的self
,在其他情况下使用此
:
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();
关于编辑:在第一个选项中,事件处理程序将不起作用,因为您将立即调用它,而不是传递引用。您必须修改该方法以返回函数。您只需要单击中的self
,在其他情况下使用此
:
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();
关于编辑:在第一个选项中,事件处理程序将不起作用,因为您将立即调用它,而不是传递引用。您必须修改该方法以返回函数。如第一个示例所示,如果为绑定目标使用参数,则代码的可重用性更高。例如:
bindEvent: function(target) {
target.onclick = function() { alert(target + " was clicked"); };
}
bindEvent()
现在可以由其他函数调用,并以self
以外的对象为目标。虽然在当前的Slider对象中,它只需要由init()
调用,但将来您可能会向Slider添加功能,这将得益于此功能的可重用性。此时,您可以避免重写函数,或者更糟糕的是,为新用例创建一个本质上重复的函数
在self
不是目标的情况下,仅仅是对父对象的引用,任何一个例子都可以。如果您的函数已经有一长串它接受的参数,那么在函数内部设置self
,而不是将其作为参数传递通常是一个好主意。大量参数使代码更难理解、重构和测试。如第一个示例所示,如果将参数用于绑定目标,则代码的可重用性更高。例如:
bindEvent: function(target) {
target.onclick = function() { alert(target + " was clicked"); };
}
bindEvent()
现在可以由其他函数调用,并以self
以外的对象为目标。虽然在当前的Slider对象中,它只需要由init()
调用,但将来您可能会向Slider添加功能,这将得益于此功能的可重用性。此时,您可以避免重写函数,或者更糟糕的是,为新用例创建一个本质上重复的函数
在self
不是目标的情况下,仅仅是对父对象的引用,任何一个例子都可以。如果您的函数已经有一长串它接受的参数,那么在函数内部设置self
,而不是将其作为参数传递通常是一个好主意。大量的参数使代码更难理解、重构和测试。您只需要在中单击中的self
,在其他情况下使用此。此外,不能像在对象中那样调用Slider.init()
。我相信你想要一个构造函数。我知道我可以使用this
,但我与其他团队成员一起工作,并同意在任何时候引用对象时都使用self。另外,我认为init调用是一个输入错误。您只需要单击中的self
,在其他情况下使用this
。此外,不能像在对象中那样调用Slider.init()
。我相信你想要一个构造函数。我知道我可以使用this
,但我与其他团队成员一起工作,并同意在任何时候引用对象时都使用self。我还发现init调用是一个输入错误。