2017-10-16 2 views
0

ich diesen Code zu schreiben, aber ich `t jetzt, warum meine console.log geben Sie mir nicht definiert und wie kann ich Wert von Prototypen Eigenschaften oder Funktionen erhaltenWie Prototyp Eigenschaften erhalten

(function() { 
 

 
    function Users() {} 
 
    Users.prototype.getUser = function() { 
 
     $.getJSON('/usersList/users.json', function(request) { 
 
     Users.prototype.allUsers = request.users; 
 
     }); 
 
    } 
 

 
    var users = new Users(); 
 
    users.getUsers(); 
 

 
    console.log(users.allUsers); 
 
    } 
 
())

Was ich erreichen möchte, ist diese Benutzerliste als meine Objekteigenschaft zu haben wie User.allUsers in irgendeinem Array. Danke

+3

'Quiz' =' Benutzer '. Bitte beheben Sie das zuerst. – Bergi

+1

Warum sollten Sie "allUsers" zu einer Prototypeigenschaft machen? Wird es wirklich von allen Instanzen der Klasse geteilt? Wenn ja, warum ist 'getUsers 'eine Instanzmethode? – Bergi

+1

Und schließlich, "getJSON" ist ** asynchron **. [Es wird die Eigenschaft erst später setzen (oder niemals im Falle eines Fehlers)] (https://stackoverflow.com/q/23667086/1048572), deshalb ist es immer noch 'undefiniert', wenn Sie darauf zugreifen. – Bergi

Antwort

0

Dies ist, weil $.getJSON asynchron ist.

Wenn Sie ein Objekt von User Prototyp erstellen, muss $.getJSON seinen Callback noch aufrufen.

Auf der anderen Seite versuchen Sie, globale Variablen zu simulieren, die einem bestimmten Prototyp Dateneigenschaften hinzufügen. Das ist eine schlechte Übung und am Ende des Tages haben Sie bereits gemerkt, dass Sie bei diesem Ansatz stecken geblieben sind.

Was Sie einen Initialisierungscode ausgeführt müssen, wenn die Website oder App gestartet wird, so dass diejenigen, allUsers einmal aufgerufen werden und überall injiziert:

const initApp =() => Promise.all([ 
    $.getJSON("/someData/users.json") 
    // other comma-separated async functions which return promises 
]) 

initApp().then(([allUsers, otherData, yetAnotherData]) => { 

    callSomeFunctionWhichRequiresAllUsers(allUsers) 
}) 
+0

@Bergi Ja, fertig. –

+0

Danke für diese Antwort, aber gibt es dafür eine einfache Lösung. Ich möchte nur diese JSON-Daten in allen meinen Funktionen verwenden –

+0

@JelenaK Kein Problem. Entschuldigung, es gibt keinen anderen Weg. Nun, es gibt Varianten des gleichen Ansatzes, aber am Ende des Tages bedeutet asynchroner Code, mit Callbacks oder Versprechungen zu arbeiten. –

Verwandte Themen