Javascript 原型模式(调用函数)

Javascript 原型模式(调用函数),javascript,Javascript,我正在尝试使用Addy Osmani的原型模式 我有一个对象“app”,在提交表单时,我试图调用init函数中的一个函数。但它不是控制台。日志记录 $(document).ready(function() { var app = { logHello: function() { console.log('hello'); }, initialize: function() {

我正在尝试使用Addy Osmani的原型模式

我有一个对象“app”,在提交表单时,我试图调用init函数中的一个函数。但它不是控制台。日志记录

$(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”错误呢?