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”被指定给 click 元素。(按钮)

我怎样才能防止这种情况?

我总是希望“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 回答