1

どちらがベストですか?変数を設定して呼び出しに渡すか、毎回変数を再設定します。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

でのみ必要ですselfwasClicked他の場合は次を使用します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 に答える