2015-09-06 90 views
2

我有一个对象,它简化了一下的样子:如何从一个对象中调用一个函数,从javascript中的同一个对象的另一个函数的函数中调用?

function obj(arg){ 
    return{ 
     fct1: function(){ 
      $(".output").append("called fct1 with arg: "+arg+"<br>"); 
     }, 
     fct2: function(){ 
      $(".output").append("called fct2, which has an other function, which calls fct1<br>"); 
      fct2a(); 
      function fct2a(){ 
       $(".output").append("doing something else, then calling fct1<br>"); 
       this.fct1(); //not within scope 
      } 
     } 
     } 
    } 
var myobj = obj("asd"); 
myobj.fct2(); 

我想从fct2a调用fct1,怎么样? Fiddle

回答

3

创建一个临时变量并将该对象设置为this对象并从中调用。请在下面找到

function obj(arg){ 
    return{ 
     var temp=this; 
     fct1: function(){ 
      $(".output").append("called fct1 with arg: "+arg+"<br>"); 
     }, 
     fct2: function(){ 
      $(".output").append("called fct2, which has an other function, which calls fct1<br>"); 
      fct2a(); 
      function fct2a(){ 
       $(".output").append("doing something else, then calling fct1<br>"); 
       temp.fct1(); 
      } 
     } 
     } 
    } 
var myobj = obj("asd"); 
myobj.fct2(); 
+0

作品,如果我打电话fct2a之前宣布VAR温度()。谢谢! –

0

代码也可以单独声明fct1()并调用它在你需要它:

function obj(arg){ 
    function innerFct1(arg) { 
     $(".output").append("called fct1 with arg: "+arg+"<br>"); 
    } 
    return{ 
     fct1: innerFct1, 
     fct2: function(){ 
      $(".output").append("called fct2, which has an other function, which calls fct1<br>"); 
      fct2a(); 
      function fct2a(){ 
       $(".output").append("doing something else, then calling fct1<br>"); 
       innerFct1("arg2"); //not within scope 
      } 
     } 
    } 
} 
var myobj = obj("asd"); 
myobj.fct2(); 
+0

如果innerFct1引入arg,该怎么办? –

+0

我编辑了我的答案 – LostMyGlasses