0
var contactForm =
    {
        form: $('.contact'),
        button: $('button'),
        config: {
            type: 'slideDown',
        },

        init: function (config)
        {
            $.extend(this.config, config);

            contactForm.button.on('click', function() 
            {
                if(contactForm.form.is(':hidden'))
                    this.showForm();
                else
                    this.closeForm();
            });
        },

        showForm: function ()
        {
            contactForm.form[contactForm.config.type](2000);
        },

        closeForm: function ()
        {
            contactForm.form.slideUp(2000);
        },
    };

    contactForm.init();

init() 関数で、「this」を使用して showForm() および closeForm() メソッドを呼び出そうとしました。ただし、クリック要素には「this」が指定されています。(ボタン)

どうすればこれを防ぐことができますか?

私は常に「これ」に構造体/クラスオブジェクトを含めたいと思っています。ボタン オブジェクトを指定する場合は、this ではなく $(this) に指定します。

4

2 に答える 2

1

あなたがすべきことはthis、ハンドラ関数の外側を指す var を宣言し、それを使用することです。それがクロージャーを使用する唯一の方法です。

init: function (config){
    var me = this;

    $.extend(this.config, config);
    contactForm.button.on('click', function(){
        if(contactForm.form.is(':hidden'))
           me.showForm();
        else
           me.closeForm();
    });
}

それが唯一の方法であり、言語が機能する方法です。

于 2012-09-16T08:29:46.427 に答える
1

使用する:

init: function (config)
{
    var self = this;
    $.extend(this.config, config);

    self.button.on('click', function() 
    {
        if(contactForm.form.is(':hidden'))
            self.showForm();
        else
            self.closeForm();
    });
},
于 2012-09-16T08:30:08.157 に答える