2016-07-05 8 views
0

ich eine JavaScript-Datei haben, und ich bin mit Verschluss Funktionen erstellen:Wie eine Funktion bereits nennen definiert Javascript Verschluss mit

"use strict"; 
    (function(window) { 
var ele = function() { 

    return { 
     func3:function(methodToCall){ 
     methodToCall(); 
      }, 
     func1:function() { 
      this.func2(); 
     }, 
     func2:function() { 

     } 
    } 
} 
window.ele = new ele(); 
})(window); 

Wie Sie sehen können, versuche ich func2 von innen func1 anrufen . Der Browser bellt mich an und sagt "func2 ist undefiniert". Ich rufe func1 so auf:

<script> 
       ele.func3(ele.func1()); 

    </script> 

Wie rufe ich func2 von func1? Danke

+0

Das sollte funktionieren, aber versuchen Sie zu überprüfen, was das ist, wenn Sie func1 anrufen – juvian

+0

Ich habe meinen Beitrag aktualisiert. Tut mir leid, dass – BoundForGlory

+0

für mich funktioniert, wenn Sie 'func1: function() {this.func2()}' für 'func1: function() {return this.func2; } 'https://jsfiddle.net/joherro3/kwmw8m8/ –

Antwort

0

Wenn Sie methodToCall() tun, ist es dasselbe wie window.methodToCall(). Wenn also func1 ausgeführt wird, bezieht sich dies auf das Fensterobjekt, anstatt auf das, was Sie wirklich wollen. Eine Möglichkeit der Befestigung für sie verbindlichen den Umfang manuell wie folgt aus:

methodToCall.bind(this)(); 

auf diese Weise, die diese Referenz wird weitergegeben, anstatt Fenster func1 und es wird funktionieren

0

Haben Sie jemals diese Arbeit bekommen? Es geht um Umfang und Schließungen. Sie können viele gute Detail erhalten über Schließungen hier mit: https://stackoverflow.com/a/111111/6441528

Darüber hinaus ist hier ein kurzes Stück Code, der Ihre Frage direkt durch die Beschreibung antworten:

function ClosureObject() { 

     var _this = this; 

     this.interior1 = function() { 
      console.log('** in interior 1'); 
      var callingOtherFunction = _this.interior2(); 
      console.log('** return from other function in closure', callingOtherFunction); 
     } 

     this.interior2 = function() { 
      return "returning from interior2"; 
     } 

    } 

Grundsätzlich, indem er erklärt, den Umfang lokal innerhalb Ihre Funktion, die 'this' verwendet, können Sie auf andere Funktionen innerhalb der Schließung zugreifen.

var foo = new ClosureObject(); 
foo.interior1(); 

Das würde Ausgang in der Konsole: Dies sollte man so etwas tun kann.

Verwandte Themen