2017-12-15 5 views
-1

Hier ist mein Code:Warum ist das undefiniert, wenn ich eine Funktionseigenschaft aufruft?

function myOuterFunction() { 
 

 
    myInnerFunction(); 
 

 
    var myObject = {say: myInnerFunction.myProperty1, 
 
        say2: myInnerFunction.myProperty2 
 
       }; 
 

 

 
    function myInnerFunction(){ 
 

 
     return {myProperty1: "hello", 
 
       myProperty2: "world" 
 
      }; 
 
    } 
 
    
 

 
console.log(myObject); 
 
} 
 
myOuterFunction();

Warum ich nicht in der Lage bin, die Funktionen Eigenschaft geht?

Ich weiß, ich könnte das mit einer anderen Variable lösen, aber warum ist diese Lösung nicht möglich?

Danke

+0

Rufen Sie die Funktion ... – Li357

+0

'myInnerFunction Calling()' Der Rückgabewert wird nicht magisch auf die Funktion selbst angewendet. Sie müssen den Rückgabewert etwas zuweisen ('var properties = myInnerFunction()') und dann auf den Rückgabewert ('properties.myProperty1') zugreifen. – JJJ

+0

'myInnerFunction' bezieht sich auf das Funktionsobjekt selbst, nicht auf den Wert, der beim Aufruf zurückgegeben wird. Du könntest 'myInnerFunction(). MyProperty1' jedoch tun. –

Antwort

2

Sie sollten den Wert der Funktion vor der Verwendung speichern.

function myOuterFunction() { 
 
    var data = myInnerFunction(); 
 
    var myObject = { 
 
    say: data.myProperty1, 
 
    say2: data.myProperty2 
 
    }; 
 
    function myInnerFunction() { 
 
    return { 
 
     myProperty1: "hello", 
 
     myProperty2: "world" 
 
    }; 
 
    } 
 
    console.log(myObject); 
 
} 
 
myOuterFunction();

+0

Vielen Dank! :) – Andy

0

Ihre Fehler sind 1) versuchen, nicht myInnerFunction() innerhalb myOuterFunction() zu verwenden. Es ist keine gute Programmierpraxis 2) Aufruf von myInnerFunction() tut nichts, wenn es im Freien aufrufen. Sie geben nicht einmal den Rückgabewert an eine Variable. 3) Aufruf myInnerFunction ohne() Javascript nicht sagen, dass die es eine Funktion

dies ist die Art und Weise sollten Sie es schreiben

function myOuterFunction() { 
    var myObject = {say: myInnerFunction().myProperty1, 
         say2: myInnerFunction().myProperty2 
        }; 

    console.log(myObject); 
} 
function myInnerFunction(){ 

     return {myProperty1: "hello", 
       myProperty2: "world" 
      }; 
} 
myOuterFunction(); 
+0

Danke! Sollte ich immer vermeiden, Funktionen in einer Funktion zu implementieren? – Andy

+0

Javascript haben keine Probleme mit, aber es ist eine bessere Praxis, wenn Sie nicht tun. weil es zur Gewohnheit werden wird und Sie es in anderen Programmiersprachen verwenden werden und das zu Fehlern führt. es ist nur eine Empfehlung – parsa

+0

Danke für Ihren Rat !! – Andy

Verwandte Themen