jQuery,这个方法的一个问题

时间:2012-09-16 08:27:14

标签: jquery

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'包含struct / class对象。如果我想要一个按钮对象被指定,我希望它被指定为$(this),而不是这个。

2 个答案:

答案 0 :(得分: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();
    });
}

这是唯一的方式,这就是语言的运作方式。

答案 1 :(得分: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();
    });
},