1

Revealing Module Pattern を実装しようとしています。要素の 1 つにイベント ハンドラーを割り当てる必要があります。このイベント ハンドラーはプロトタイプで定義した関数ですが、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();
4

1 に答える 1

1

あなたのコンストラクターは

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

「トリガー」は、オブジェクトの「someElement」プロパティであるjQueryインスタンスのメソッドであるため、triggerその要素でjQuerysメソッドを呼び出すことができます。(new MyClass({elementID:"someid"})).someElement.trigger()

また、オブジェクトではなく要素のコンテキストで呼び出されるため、ハンドラーは機能しません。だからそうあるべきだ

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