2013-02-15 145 views
1

我正在使用JQuery(Mobile)创建一个应用程序,并且我正面临着JQuery事件结构的问题。我定义了一个虚拟“类”是这样的:将JQuery事件分配给自定义对象方法

MyClass = function() 
{ 
    this.property = initvalue; 

    this.foo = function() 
    { 
     alert("That's my property = " + this.property); 
    } 
} 

然后,定义了基于MyClass的一个目的:

var obj1 = new MyClass(); 

当我使用obj1.foo()作为回调函数为这个问题是通报的事件,例如:

$(element).click(obj1.foo); 

$(element).load(URL, obj1.foo); 

执行foo()时,“this”引用元素,而不是对象“obj1”,当然,我不能通过自引用访问对象的“属性”。我该如何解决它?

回答

0

您可以使用jQuery的proxy方法:

$(element).load(URL, $.proxy(obj1.foo, obj1)); 

这将分配obj1上下文的方法。

0

可以bind的方法,它的实例:

$(element).click(obj1.foo.bind(obj1)); 

.bind()方法返回一个函数,所以你还是传递一个函数给jQuery的方法,但此功能将有其背景的约束,无论你传递给.bind()

如果您需要支持旧浏览器,则可以使用之前链接的MDN文章中给出的填充,或者也可以使用jQuery $.proxy方法。

0

您可以将单击事件绑定到匿名函数,该函数在对象的上下文中引用缓存版本this

var myClass = this; 
$(element).click(function() { myClass.foo(); }); 

一般来说它更高性能的使用对像.bind $,$ .proxy和_.bindAll库提供的替代这种方法(虽然在当前的例子中,我认为表现会相媲美)。请参阅this article on context binding