0

jQuery関数内で(クラスのインスタンスである)bind()を保持するために使用しています:this

if (!Function.prototype.bind) { 
    Function.prototype.bind = function(){ 
    var fn = this, args = Array.prototype.slice.call(arguments),
        object = args.shift(); 
    return function(){ 
        return fn.apply(object, 
             args.concat(Array.prototype.slice.call(arguments))); 
        }; 
    };
}

問題は、たとえばクリックイベントがあり、使用して要素にアクセスできなくなり、アクセスできる$(this)はずがない場合です。

例えば:

View.prototype.sayHelloBind = function(){
    this.$el.find('#bind').on('click', (function(){

        // This no longer works
        $(this).css('color', 'red');

        alert(this.message);
    }).bind(this));
}

JSFiddle でわかるように、私は を使用していることに気付いています。これe.dataが、実際に使用したい理由であり、bind()その構文から逃れることができます。

私の質問は、現在の jQuery オブジェクトにアクセスするだけでなく、bind()保存するために使用する方法はありますか?this

関連する JSFiddle

4

3 に答える 3

0

この場合、 event.currentTargetを使用して現在の要素を参照できます。

View.prototype.sayHelloBind = function(){
    this.$el.find('#bind').on('click', (function(event){

        // This no longer works
        $(event.currentTarget).css('color', 'red');

        alert(this.message);
    }).bind(this));
}

デモ:フィドル

.bind()を使用する代わりに、jQuery は$.proxy()と呼ばれるクロス プラットフォームの実装を提供します。

View.prototype.sayHelloBind = function(){
    this.$el.find('#bind').on('click', $.proxy(function(event){

        // This no longer works
        $(event.currentTarget).css('color', 'red');

        alert(this.message);
    }, this));
}

デモ:フィドル

于 2013-11-08T00:03:23.947 に答える