1

我正在尝试实现显示模块模式。我需要为其中一个元素分配一个事件处理程序,这个事件处理程序是我在原型中定义的一个函数,但我得到this.trigger is not a function error。

这是我所做的:

//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();
4

1 回答 1

1

我猜你的构造函数应该是

var MyClass = function (settings) {
    this.someElement = jQuery("#" + settings.elementID);
}

然后,您将能够使用 调用trigger该元素上的 jQuerys 方法(new MyClass({elementID:"someid"})).someElement.trigger(),因为“触发器”是 jQuery 实例的方法,它是对象的“someElement”属性。

此外,您的处理程序将不起作用,因为它是在元素的上下文中调用的,而不是在您的对象的上下文中。所以应该是

MyClass.prototype.init = function init() {
    this.someElement.change(this.handler || function defaulthandler() {
        $(this).hide();
    });
};
于 2011-12-31T13:20:39.833 回答