1

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

2 回答 2

1

根据您的第一个示例,如果您为绑定目标使用参数,则您的代码更可重用。例如:

bindEvent: function(target) {
    target.onclick = function() { alert(target + " was clicked"); };
}

bindEvent()现在可以被其他函数调用,并且可以针对self. 虽然在您当前的 Slider 对象中,它只需要由 调用init(),但将来您可能最终会向 Slider 添加功能,这将受益于该功能的增加的可重用性。在那个时候,您可以避免重写函数,或者更糟的是为新用例创建一个本质上重复的函数。

self不是目标的情况下,仅仅是对父级的引用,任何一个例子都可以。如果你的函数已经有一个很长的参数列表,那么self在函数内部设置而不是将其作为参数传递通常是一个好主意。大量的争论使代码更难理解、重构和测试。

于 2013-02-28T17:40:33.690 回答
0

您只需要selfin 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();

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

于 2013-02-28T17:07:21.813 回答