2

変数を作成したり、バインドしたりできます。最善の解決策は何ですか?

var object = {
    log: function (s) {
        console.log(s);
    },
    run: function () {
        var self = this;
        setTimeout(
            function () {
                self.log('test');
            }, 1000
        );
    }
};
object.run();

また:

var object = {
    log: function (s) {
        console.log(s);
    },
    run: function () {
        setTimeout(
            function () {
                this.log('test');
            }.bind(this), 1000
        );
    }
};
object.run();

更新: これを決定する方法はたくさんあります。互換性、パフォーマンス、読みやすさの側面が最も重要です。

Function.prototype.bind 関数は非常に新しいため、使用前に互換性テーブルを確認してください。

パフォーマンスについては、self を使用するのが最適です。関数を複数回呼び出す場合は bind の方が良いかもしれませんが、それはこの質問の範囲外です。

私は読みやすさのために bind が好きです。

4

2 に答える 2

2

Function.prototype.bind MDN で shimのソースを調べると、返される関数内の複数の変数に対してクロージャが形成されていることがわかります。

それを考えると、(IMHO)言語機能を利用して、自分で必要な変数を閉じるだけかもしれません。関数呼び出しを回避します。

Using.bind 、呼び出す関数のソースを制御せず、 を設定する必要があるthis場合、または追加のパラメーターを指定する場合に非常に便利です。

于 2013-10-30T10:02:59.923 に答える
0

ここには「最善の解決策」はありません。どちらのオプションも機能します。私は個人的に var self=this; が好きです。コードは冗長ではなく、通常は目的に合っているためです。

ただし、Dan Lee が述べているように、Function.prototype.bindはすべてのブラウザーで互換性があるわけではありません

underscore bind またはjQuery proxyのいずれかを使用できます。

于 2013-10-30T10:02:36.043 に答える