2017-03-15 9 views
0

Unten Code funktioniert nicht, aber meine Idee ist, Funktionen in eine Funktion zu wickeln, und rufen Sie die Elternfunktion mit Param. Der Parameter wird von ihrer Kinderfunktion verwendet.Platzierung Funktion innerhalb der Funktion Javascript

_abc(elem){ 
    a(elem){ 
    return elem + 'a'; 
    } 
    b(elem){ 
    return elem + 'b'; 
    } 
} 

_abc(elem).b() // doesn't work? 
+0

Ihre '_abc' wird allgemein als "Konstruktorfunktion" bezeichnet. Hilft Ihnen das zu sehen, was es zurückgeben soll? – 4castle

Antwort

1

Sie benötigen Funktionen wie Funktionen markieren, entfernen Sie die inneren elem Parameter und geben ein Objekt, das die Funktionen enthält:

function _abc(elem){ 
 
    function a(){ 
 
    return elem + 'a'; 
 
    } 
 
    function b(){ 
 
    return elem + 'b'; 
 
    } 
 
    
 
    return { a:a, b:b }; 
 
} 
 

 
console.log(_abc('hello').b());

Ein anderer Weg, dies zu schreiben, um diese ohne Wiederholen der Funktionsnamen mehrmals:

function _abc(elem){ 
 
    return { 
 
     a: function() { 
 
      return elem + 'a'; 
 
     }, 
 
     b: function() { 
 
      return elem + 'b'; 
 
     } 
 
    }; 
 
} 
 

 
console.log(_abc('hello').b());

Und noch eine, wie von @ 4castle vorgeschlagen. Diese wird nur von JavaScript-Umgebungen unterstützt, die EcmaScript 6 unterstützen:

function _abc(elem){ 
 
    return { 
 
     a() { 
 
      return elem + 'a'; 
 
     }, 
 
     b() { 
 
      return elem + 'b'; 
 
     } 
 
    }; 
 
} 
 

 
console.log(_abc('hello').b());

+0

In ES6 (was ich vermute, dass sie die Syntax verwenden, die das OP versucht), gibt es eine [Methoden-Kurzschrift] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operatoren/Object_initializer # Method_definitions) für Objektinitialisierer. – 4castle

+0

@ 4castle Danke. Ich kannte diese Syntax nicht, aber ich würde nicht davon ausgehen, dass OP gezielt auf ES6 abzielt. – JLRishe

+0

kann ich in es6 'return {a, b}' anstelle von 'return {a: a, b: b}'? – Mellisa

0

Sie könnten mich für eine Java-orientierte Objekt sucht, etwa so:

function _abc(elem) 
{ 
    this.elem = elem; 

    this.a = function() 
    { 
     return this.elem + 'a'; 
    } 

    this.b = function() 
    { 
     return this.elem + 'b'; 
    } 
} 

console.log(new _abc('Hey ').a()); 
+0

Ok, sagen wir mal foo dann –

+0

@AlvaroRoman Wie wäre es mit "_abc"? – JLRishe

+0

Ich mag es nicht wirklich aber fiiiiiiine, _abc ist es –

Verwandte Themen