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),而不是这个。
答案 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();
});
},