首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型模式(调用函数)

原型模式(调用函数)
EN

Stack Overflow用户
提问于 2013-09-12 17:41:13
回答 3查看 54关注 0票数 1

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

我有一个对象"app“,在提交表单时,我试图在init函数中调用一个函数。但不是console.logging..。

代码语言:javascript
复制
$(document).ready(function() {

    var app = {

        logHello: function() {
            console.log('hello');
        },



        initialize: function() {           

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

        }

    }

    app.initialize();
});

我哪里出问题了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-12 17:44:22

this现在是指您的jQuery on submit函数,请尝试使用this的上下文变量(同时,在调用函数之后需要() ):

代码语言:javascript
复制
var self = this;
$('#userlogin').on('submit', function(){
    self.logHello();
    return false;
});

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

票数 3
EN

Stack Overflow用户

发布于 2013-09-12 17:44:31

代码语言:javascript
复制
  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

票数 3
EN

Stack Overflow用户

发布于 2013-09-12 17:44:28

这是一个范围问题。在提交事件处理程序中,this变量引用函数的作用域,而不是logHello函数所在的app范围。

试着做这样的事情:

代码语言:javascript
复制
...
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所包含的所有变量和函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18770908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档