1

私はいくつかのコードを持っています..ala

$.fn.someObj= function(){
    this.opt = {
       whatever : 'somevalue',
       whateve2 : 'more values'
    }
    this.someMethod = function(){
       //do something
       $(someElem).bind('click',function(){
          this.someOTHERMethod();  <----- ISSUE HERE
       })
    }
    this.someOTHERMethod = function(){
       // do more stuff

    }
   this.init = function(data){
       $.extend(this.opt, data);
       this.someMethod();
 };

};

クロージャを作成して問題を修正できます。

var that = this;
    //code
    that.someOTHERMethod(); <--- works

または、メソッドから「this」を削除した場合:

someOTHERMethod = function(){}

and just call it: someOTHERMethod(); < ---- works

しかし、クロージャーなしでその外側の機能を取得するためのよりエレガントな方法があるかどうか疑問に思っていますか?何か案は?

4

2 に答える 2

1

クロージャは必要ありません。関数への参照を渡すだけで、ラッパーの無名関数を削除できます。

$(someElem).on('click', this.someOTHERMethod);

this内部の値をにsomeOTHERMethodしたい場合は、zzzzBovの回答に従ってsomeObj、それも使用します。$.proxy

于 2013-01-30T03:12:34.497 に答える
1

jQueryを使用しているので、使用する必要があります$.proxy

$(someElem).on('click', $.proxy(this, 'someOTHERMethod'));
于 2013-01-30T02:54:11.413 に答える