Javascript 原型模式(调用函数)
我正在尝试使用Addy Osmani的原型模式 我有一个对象“app”,在提交表单时,我试图调用init函数中的一个函数。但它不是控制台。日志记录Javascript 原型模式(调用函数),javascript,Javascript,我正在尝试使用Addy Osmani的原型模式 我有一个对象“app”,在提交表单时,我试图调用init函数中的一个函数。但它不是控制台。日志记录 $(document).ready(function() { var app = { logHello: function() { console.log('hello'); }, initialize: function() {
$(document).ready(function() {
var app = {
logHello: function() {
console.log('hello');
},
initialize: function() {
$('#userlogin').on('submit', function(){
this.logHello;
return false;
});
}
}
app.initialize();
});
我哪里出错了?
此
现在指的是您的jQuery提交
函数,请尝试使用此
的上下文变量(另外,调用函数后需要()
):
演示:
此
现在指的是提交函数时的jQuery,请尝试使用此
的上下文变量(另外,调用函数后需要()
):
演示:这是一个范围问题。在提交事件处理程序中,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\u scope
现在将包含app
的作用域,因此您可以访问app
包含的所有变量和函数。这是一个作用域问题。在提交事件处理程序中,this
变量引用函数的作用域,而不是logHello
函数所在的app
的作用域
initialize: function() {
var self=this;
$('#userlogin').on('submit', function(){
self.logHello();
return false;
});
}
试着这样做:
...
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
包含的所有变量和函数
initialize: function() {
var self=this;
$('#userlogin').on('submit', function(){
self.logHello();
return false;
});
}
此关键字根据函数作用域的不同而变化,除非它以某种方式绑定到某个作用域,否则另一个函数中的函数将创建一个新的作用域
此关键字根据函数作用域的不同而变化,除非它以某种方式绑定到某个作用域,否则另一个函数中的函数将创建一个新的作用域
在jQuery事件处理程序中,此
引用元素(由jQuery显式设置)。因此,this.logHello
,因为您没有调用任何东西,所以它不会做任何事情,它引用的是不存在的东西。那么我该如何纠正“this”错误呢?在jQuery事件处理程序中,this
引用元素(由jQuery显式设置)。因此,this.logHello
,因为您没有调用任何东西,所以它不会做任何事情,它引用的是不存在的东西,那么我该如何纠正“this”错误呢?