我正在尝试使用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();
});我哪里出问题了?
发布于 2013-09-12 17:44:22
this现在是指您的jQuery on submit函数,请尝试使用this的上下文变量(同时,在调用函数之后需要() ):
var self = this;
$('#userlogin').on('submit', function(){
self.logHello();
return false;
});演示:http://jsfiddle.net/59Y9z/
发布于 2013-09-12 17:44:31
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
发布于 2013-09-12 17:44:28
这是一个范围问题。在提交事件处理程序中,this变量引用函数的作用域,而不是logHello函数所在的app范围。
试着做这样的事情:
...
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所包含的所有变量和函数。
https://stackoverflow.com/questions/18770908
复制相似问题