$(document).ready(function(){
$('html').addClass('js');
var contactForm = {
init: function(){
$('<button></button>',{
text: 'contact me'
}).appendTo('article')
**.on('click', this.show);**
},
show: function(){
console.log('show is clicked');
}
}
contactForm.init();
});
在onClick调用中,为什么在加载dom时会立即执行.on('click', this.show());
,之后只有在单击按钮时才会执行。
答案 0 :(得分:4)
末尾的括号表示应立即调用上一个函数。没有括号,它就成了函数的引用。
因此,on('click', this.show());
意味着在设置show
处理程序时,在加载时调用click
函数,并将其返回值设置为事件处理程序。
on('click', this.show);
为点击处理程序提供对show
函数的引用,click
事件发生时将调用该函数。
最佳做法是仅将函数的引用传递给事件处理程序 - 即。后一个例子。
答案 1 :(得分:3)
'on()'是一个函数(在这种情况下)有两个参数。
this.show
传递对名为show
的函数的引用。
this.show()
调用该函数并传递返回值。