原型模式(调用函数)

时间:2013-09-12 17:41:14

标签: javascript

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

我哪里错了?

3 个答案:

答案 0 :(得分:3)

this现在指的是你的jQuery on submit函数,尝试使用this的上下文变量(在你调用函数后也需要()):< / p>

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

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

答案 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所拥有的所有变量和函数。

相关问题