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

当你使用 jQuery 时,你应该使用$.proxy

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

您不需要闭包,只需传递对函数的引用,并消除包装匿名函数:

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

如果您希望this里面的值someOTHERMethodsomeObj,那么$.proxy也可以根据 zzzzBov 的回答使用。

于 2013-01-30T03:12:34.497 回答