Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置变量并传递给函数还是重新设置变量?_Javascript_Jquery_Design Patterns_Modular - Fatal编程技术网

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调用是一个输入错误。