我正在尝试实施Revealing Module Pattern。我需要为一个元素分配一个事件处理程序,这个事件处理程序是我在protoype中定义的函数,但我得到 this.trigger不是函数错误。
这就是我所做的:
//constructor
var MyClass = function (settings) {
this.someElement=$(settings.elementID);
}
//prototype
MyClass.prototype = function() {
var init = function() {
this.someElement.change(this.handler);
},
handler = function() {
this.someElement.hide();
};
return {
init : init,
handler : handler
};
}();
以下是我的称呼方式:
var myClass = new MyClass();
myClass.init();
答案 0 :(得分:1)
我猜你的构造函数应该是
var MyClass = function (settings) {
this.someElement = jQuery("#" + settings.elementID);
}
然后,您将能够使用trigger
在该元素上调用jQuerys (new MyClass({elementID:"someid"})).someElement.trigger()
方法,因为“trigger”是jQuery实例的一个方法,它是对象的“someElement”属性。 / p>
此外,您的处理程序将无法工作,因为它在元素的上下文中调用,而不是在您的对象的上下文中调用。所以它应该是
MyClass.prototype.init = function init() {
this.someElement.change(this.handler || function defaulthandler() {
$(this).hide();
});
};