如何从JavaScript中的同一对象中的另一个方法调用方法?

我刚刚开始使用OO javascript,所以请耐心等待.

这有效:

var myObj = {
     foo : function() {
            alert('hello');
            this.bar();
     },
     bar: function() {
            alert('world');
     }
}

但是,如果我在“foo”方法中的hello警告之后执行其他操作,那么“this”的含义会从对象更改为我上次选择的任何内容,因此使用this.bar()不会执行类中的其他方法.

所以我试着在这样的变量中缓存“this”:

var myObj = {
     publicVars: {
            theObj : this
     },
     foo : function() {
            alert('hello');
            publicVars.theObj.bar();
     },
     bar: function() {
            alert('world');
     }
}

但这也不起作用.那么解决方案是什么?

编辑

这是我的实际代码:

var formObj = {

     validate : function(theForm) {
            $('input, textarea', theForm).each(function() {
                 var valueLength = $(this).val().length;
                 if (valueLength === 0) {
                        $(this).addClass('invalid');
                        this.listenForInput($(this)); // <!------- this isn't working
                 }
            });
     },
     listenForInput : function(theField) {
//          theField.keyup(function() {
//               if ($(this).val().length > 0) {
//                      theField.removeClass('invalid');
//               }
//          });
            alert('I work!!!!');
     }

} // end obj
最佳答案
正如我在评论中所说,你必须在函数内部保留一个引用:

validate: function(theForm) {
    var self = this;
    $('input, textarea', theForm).each(function() {
        var valueLength = $(this).val().length;
        if (valueLength === 0) {
           $(this).addClass('invalid');
           self.listenForInput($(this));
        }
    });
},

您正在将函数传递给每个函数.在这个回调中,这指的是DOM元素.这就是你将它传递给jQuery($(this))以便能够在该元素上调用jQuery方法的原因.它也不能引用formObj!

这指的是由函数如何调用以及每个函数都有自己的函数(Mozilla documention更详细地描述了这一点).

如果使用formObj.validate()调用validate,那么这将引用formObj.

jQuery documentation for each声明:

More importantly, the callback is fired in the context of the current DOM element, so the keyword this refers to the element.

转载注明原文:如何从JavaScript中的同一对象中的另一个方法调用方法? - 代码日志