设置变量并传递给函数或重新设置变量?

时间:2013-02-28 17:00:05

标签: javascript jquery design-patterns modular

哪个最好?设置一个变量并将其传递给调用,或者每次都重新设置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();
    }
};

2 个答案:

答案 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();

关于你的编辑:在第一个选项中,事件处理程序将不起作用,因为你正在调用它而不是传递引用。您必须修改方法以返回函数。

相关问题