将JQuery事件分配给自定义对象方法
Assigning JQuery events to custom object methods
我正在使用JQuery(Mobile)创建一个应用程序,但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",当然我不能用自引用访问对象的"property"。我该怎么修?
您可以使用jQUery的proxy
方法:
$(element).load(URL, $.proxy(obj1.foo, obj1));
这将为您的方法分配obj1
上下文。
您可以将方法绑定到其实例:
$(element).click(obj1.foo.bind(obj1));
.bind()
方法返回一个函数,所以您仍然将一个函数传递给jQuery方法,但该函数的上下文将绑定到您传递给.bind()
的任何函数。
如果需要支持较旧的浏览器,可以使用前面链接到的MDN文章中给出的polyfill,也可以使用jQuery $.proxy
方法。
您可以将click事件绑定到一个匿名函数,该函数在对象的上下文中引用this
的缓存版本。
var myClass = this;
$(element).click(function () { myClass.foo(); });
通常,使用此方法比库提供的替代方法(如$.bind、$.proxy和_.bindAll)更具性能(尽管在您当前的示例中,我认为性能相当)。请参阅这篇关于上下文绑定的文章。
相关文章:
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 使用数组自定义对象
- 使用带有自定义对象作为属性的jQuery.extend时出现意外行为
- 在JavaScript中定义自定义对象和函数(第2部分)
- 在JavaScript中定义自定义对象和函数
- 如何获得一个动态增长的自定义对象的Javascript数组
- Angular Schema Form-自定义对象编辑器
- 使用JavaScript将自定义对象添加到文档中
- 序列化具有方法的自定义对象.序列化后删除的方法-要采取的步骤
- 正在将img/文件上载到Quickbloxx自定义对象API
- 生成自定义对象调用
- 将自定义对象的猫鼬 PUT 实现到复杂架构中时出现问题
- 如何在 Javascript 中制作自定义对象数组
- 使 HTML 元素从自定义对象继承事件
- Javascript错误消息,自定义对象表示
- 在自定义对象上使用 jQuery 等选择器
- 自定义对象内的范围问题
- 自定义对象中的变量范围
- 如何使用Visual Force和Javascript在Salesforce中的自定义对象中获取自定义字段值
- 自定义对象/类型 Javascript