从Object Literal调用函数

时间:2013-12-16 11:57:21

标签: javascript

从Object Literal调用函数

 var runApp = {
    init: function(){  
       this.validate();
    },
    run: function() {
       var myStr = "My Name";
       var abc = function()
       {
         return myStr;
       }
    },
    validate: function() {
      var val = this.run().abc(); // It Gives "Uncaught TypeError: Cannot call method 'abc' of undefined "
      alert(val);
    }
 };

 runApp.init();

如何在函数validate中调用函数abc()

3 个答案:

答案 0 :(得分:1)

您可以从对象内的abc函数返回run函数:

run: function() {
   var myStr = "My Name";

   var abc = function() {
      return myStr;
   }
   return { abc : abc };
}

然后this.run().abc()将有效。

答案 1 :(得分:1)

函数abc在“run”的范围内定义,因此无法从另一个函数访问。如果你真的想要这个,你可以在“this”范围内提供“abc”。

var runApp = {

    init: function(){
            this.validate();
    },
    run: function() {
            var myStr = "My Name";

            this.abc = function() {
                    return myStr;
            }
    },
    validate: function() {
        this.run(); // run this one first so function abc exists
            var val = this.abc(); 
            alert(val);
    }

}
runApp.init();

简而言之:如果不修改代码本身,就无法做到这一点。

答案 2 :(得分:0)

由于您的run方法未返回包含abc函数的对象,因此您无法调用它。它返回undefined。

对此的一个解决方案是,如果您返回一个具有名为abc的方法的对象。