我正在尝试使用Addy Osmani的原型模式。
我有一个对象“app”,并且在提交表单后,我正在尝试调用init函数内部的函数。但它不是console.logging ......
$(document).ready(function() {
var app = {
logHello: function() {
console.log('hello');
},
initialize: function() {
$('#userlogin').on('submit', function(){
this.logHello;
return false;
});
}
}
app.initialize();
});
我哪里错了?
答案 0 :(得分:3)
this
现在指的是你的jQuery on submit
函数,尝试使用this
的上下文变量(在你调用函数后也需要()
):< / p>
var self = this;
$('#userlogin').on('submit', function(){
self.logHello();
return false;
});
答案 1 :(得分:3)
initialize: function() {
var self=this;
$('#userlogin').on('submit', function(){
self.logHello();
return false;
});
}
此关键字根据函数范围而变化,另一个函数中的函数创建一个新范围,除非它以某种方式绑定到范围。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
答案 2 :(得分:2)
这是一个范围问题。在提交事件处理程序中,this
变量引用函数的范围,而不是app
函数所在的logHello
范围。
尝试这样的事情:
...
initialize: function() {
var old_scope = this; // save the scope into a local variable
$( '#userlogin' ).on( 'submit' , function() {
old_scope.logHello;
return false;
});
},
...
变量old_scope
现在将包含app
的范围,因此您将能够访问app
所拥有的所有变量和函数。