jQuery事件触发器+构造函数模式
jQuery event trigger + constructor pattern
我用"new"创建一个对象,初始化它,并用$(this).trigger({type:"myevent", field1:val1})
订阅它的事件,比如(here-jswiddle),它可以工作:
var Users = function (selector) {
var that = this;
var myButton;
//function to trigger
function add(name) {
console.log("before trigger for: $('"+selector+"') with ["+name+"]")
$(that).trigger({
type: "user-added",
name: name,
date: new Date(),
});
}
$(selector).click(function () {
add($("#name").val());
});
};
我的问题是,我有兴趣在单独的函数init
(另一个jsfiddle)中传递selector
:
var Users = function () {
var that = this;
var mySelector;
//function to trigger
function add(name) {
console.log("before trigger for: $('" + mySelector + "') with [" + name + "]")
$(that).trigger({
type: "user-added",
name: name,
date: new Date(),
});
}
function init(selector) {
mySelector = selector;
$(selector).click(function () {
add($("#name").val());
});
}
return {
init: init
};
};
在这种情况下,代码正在崩溃:
当事件被触发时,函数看到的that
对象看起来像Users {}
,
并且没有像工作样本中那样更新:Users {jQuery11111210404012482791554801678404482030027643403015099466: Object}
,
因此jQuery不会触发该事件。
当然,我可以在init()
中设置that
,或者在构造函数中初始化对象来解决问题,但如果我在构造函数中设置它并连接到内部函数中的事件,"that"
成员就不会连接到实际对象,而如果我在同一函数中连接到事件,它就会起作用,这让我抓狂。
谢谢。
return { init: init };
您不应该从使用new
调用的构造函数中return
任何内容。that
引用的this
对象是一个空的User
实例,但不是具有您返回、分配给u1
并在其上安装处理程序的init
函数的普通对象。
与其返回对象文字,您应该只执行
this.init = init;
首先,在传入选择器时,尝试:
var u = new Users($("#but1"));
对于外侧的通过选择器,设置:
var mySelector;
在"Users"函数的外部,通过这种方式,任何其他函数都可以覆盖变量的值,并保留其最后一个值,无论您运行"Users"多少次。然后动态设置选择器,如下所示:
mySelector = $("#but1");
相关文章:
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- 日志记录时避免 Promise 构造函数反模式
- 用于初始化对象的编码模式 - 构造函数(新)与 Object.create()(Crockford)
- 如何在 Crockford 的新构造函数模式中共享“构造函数”功能
- 构造函数模式和原型模式之间的区别
- 使用构造函数显示模块模式
- IIFE创建模式-但如何支持构造函数参数
- json模式的构造函数
- AngularJS设计模式:我应该使用工厂来创建构造函数吗
- 为什么实用模块&构造函数模式将其作为全局接受
- 带有私有变量的JavaScript构造函数模式
- JavaScript 构造函数模式
- 构造函数模式下的自执行函数
- 为什么我的JavaScript构造函数模式不能工作?
- JS构造函数模式
- 简单构造函数模式
- jQuery事件触发器+构造函数模式
- return和new关键字构造函数模式的区别是什么?
- crockford的JavaScript构造函数模式真的应该更快吗?
- Javascript:混合构造函数模式和揭示模块模式