我使用" new"创建一个对象,初始化它并使用$(this).trigger({type:"myevent", field1:val1})
订阅它的事件,如( here - jsfiddle ) ,它的确有效:
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());
});
};
我的问题是我有兴趣将selector
传递给另一个函数init
( another jsfiddle ):
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不会触发事件。
当然,我可以在that
中设置init()
,或者在构造函数中初始化对象以解决问题,但它让我疯狂为什么"that"
成员没有联系到实际对象,如果我在构造函数中设置它并连接到内部函数中的事件,但如果我在同一函数中连接到事件,它确实有效。
感谢。
答案 0 :(得分:2)
return { init: init };
您不应该return
来自正在调用的构造函数with new
的任何内容。 that
引用的this
object 是一个空的User
实例,但不是您返回的init
函数的普通对象,已分配给u1
并安装了处理程序。
您应该只执行
,而不是返回该对象文字 this.init = init;
答案 1 :(得分:0)
首先,在传递你的选择器时,尝试:
var u = new Users($("#but1"));
至于在外面传递选择器,请设置:
var mySelector;
在“用户”功能的外部,这样任何其他功能都可以覆盖变量的值,并保持其最后一个值,无论您运行“用户”多少次。然后动态设置您的选择器:
mySelector = $("#but1");