Een innerlijke functie aanroepen

Als ik heb:

var myFunction = function() {
    var myInner = function() {
    }
}

hoe noem ik dan myFunction.myInner ()?

1

6 antwoord

Je kunt ook iets doen als:

var myFunction = function() {
   this.myInner = function() {
     //...
   }
}

var foo = new myFunction();
foo.myInner();

Of nog een ander patroon dat ik gebruik om een ​​beetje statische klassen na te bootsen:

var myFunction = new function() {
   this.myInner = function() {
     //...
   }
};

myFunction.myInner();
3
toegevoegd
Ja, ik hou ook van de kaartaanpak die ook nheinrich noemde. Het is geweldig als je gewoon een aantal functies bij elkaar moet hebben. Mijn manier is misschien beter als je privévariabelen nodig hebt en methoden andere methoden aanroepen en wat niet.
toegevoegd de auteur Mike Christensen, de bron
Om toe te voegen, dit. maakt myInner-functie een openbaar toegankelijke functie op het object myFunction, waarbij het gebruik van var het privé maakt (via sluitingen)
toegevoegd de auteur Matt, de bron

je kunt het zo noemen:

var myFunction = function() {
    var myInner = function() {}

    return myInner;
}

myFunction()();

In je voorbeeld creëer je de innerlijke functie, maar je moet deze teruggeven om hem toegankelijk te maken.

3
toegevoegd
oops mijn slechte dank.
toegevoegd de auteur kemiller2002, de bron
dat slaat nergens op. Bedoelde u myFunction() ()?
toegevoegd de auteur Esailija, de bron

Als u het object enigszins anders hebt geconstrueerd, kunt u het volgende gebruiken:

var myFunction = {
  innerFunction: function(txt){
    alert(txt);
  }    
}

myFunction.innerFunction("heyooo");

Dit is misschien niet ideaal, afhankelijk van wat u probeert te bereiken.

fiddle: http://jsfiddle.net/neilheinrich/Xjegt/

2
toegevoegd
Ik denk dat dit een geweldig voorbeeld is.
toegevoegd de auteur Phillip Senn, de bron

Dat kan niet. Laat me een vraag herformuleren om een ​​glimp op te vangen van de nachtmerrieachtige wereld waar het mogelijk is om te doen wat je vroeg

var myFunction = function() {
    for(var i=0; i

Als u toegang wilt tot de innerlijke functie, moet u deze retourneren of een globale variabele instellen of een van de dingen die u ook zou doen als het een variabele in plaats van een functie zou zijn.

1
toegevoegd

Functies zijn scopes in JavaScript. U kunt vanuit een functie geen functie oproepen, tenzij u het als een methode declareert. Sommigen hebben gesuggereerd dat je objecten of rare patronen gebruikt, die al dan niet zijn wat je wilt ...

Als je een "klasse-achtige" functie met openbare/private methoden en variabelen wilt, doe dit dan:

//Declare your "class"
function Foo(specs) {

    //Can do whatever you want with specs
    //jQuery uses it to initialize plugin data ;)

    //These are examples of private variables
    var a = 1;
    var b = "b";

    //These are examples of public variables
    this.aa = 1;
    this.bb = "b";

    //This is a private method
    function Bar_Private(p0,p1) {...}

    //This is a public method
    this.Bar_Public = function(p0,p1) {...}

}

//Now to use it....
//Create an instance
var myInstance = new Foo();

//Using it
alert(myInstance.a);    //Reference Error
alert(myInstance.aa);   //Alerts 1

myInstance.Bar_Private(0,1);  //Reference Error
myInstance.Bar_Public(0,1);   //Calls Bar_Public with 0 and 1 as params

JavaScript heeft geen echte klassen, maar het is het gemakkelijkst om dit patroon te beschrijven als "klasse-achtig".

Vanzelfsprekend kunt u zoveel openbare/particuliere methoden, objecten, enz. Toevoegen als u maar wilt.

Merk ook op: VERGEET NIET DE "NIEUWE" OPERATOR BIJ HET MAKEN VAN EEN INSTANTIE MET DIT PATROON ... als u dat doet, dan is "dit" gebonden aan uw globale ruimte en kan het andere toepassingsgegevens (naambotsingen) overschrijven.

Ik hoop dat dit helpt, veel geluk!

1
toegevoegd
Nou, dit was een heel compleet antwoord. Bedankt jyore!
toegevoegd de auteur Phillip Senn, de bron
Geen probleem, blij dat ik kon helpen
toegevoegd de auteur jyore, de bron

In dit geval kun je alleen de innerlijke functie aanroepen, wanneer code wordt uitgevoerd die zich in de buitenfunctie bevindt ... tenzij je de innerlijke functie op de een of andere manier terugzet.

var myFunction = function() {
    var myInner = function() {
    }
   //you can call it here
    myInner();
}
0
toegevoegd