1

我正在尝试使用 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();
});

我哪里错了?

4

3 回答 3

3

this现在指的是您的 jQueryon submit函数,请尝试使用上下文变量this(另外,您需要()在调用函数后):

var self = this;
$('#userlogin').on('submit', function(){
    self.logHello();
    return false;
});

演示:http: //jsfiddle.net/59Y9z/

于 2013-09-12T17:44:22.057 回答
3
  initialize: function() {           
            var self=this;
            $('#userlogin').on('submit', function(){
                self.logHello();
                return false;
            });

        }

this 关键字根据函数作用域而变化,另一个函数中的函数会创建一个新作用域,除非它以某种方式绑定到作用域。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

于 2013-09-12T17:44:31.300 回答
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

于 2013-09-12T17:44:28.097 回答