2017-10-16 11 views
0

は、私はこのコードを書いたが、私はconsole.logは未定義私に与え、どのように私は、プロトタイプの性質や機能プロトタイププロパティ

(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); 
 
    } 
 
())

の値を取得することができますなぜ私は今着る `tを取得する方法私が達成しようとしないのは、このユーザリストをUser.allUsersのようなオブジェクトプロパティとしていくつかの配列に持つことです。 ありがとう

+3

'Quiz' =' Users'を!。最初に修正してください。 – Bergi

+1

'allUsers'をプロトタイププロパティにしたいのですが?それは本当にクラスのすべてのインスタンスによって共有されていますか?はいの場合、なぜ 'getUsers'がインスタンスメソッドですか? – Bergi

+1

最後に、 'getJSON'は**非同期**です。 [それは後で(または決してエラーの場合には決してプロパティを設定しない)](https://stackoverflow.com/q/23667086/1048572)、それはあなたがそれにアクセスするときにまだ '未定義です。 – Bergi

答えて

0

これは、$.getJSONが非同期であるためです。

Userプロトタイプからオブジェクトを作成するとき、$.getJSONはコールバックをまだ呼び出す必要があります。

一方、与えられたプロトタイプにデータプロパティを追加するグローバル変数をシミュレートしようとしています。これは悪い習慣であり、今日の終わりには、あなたはすでにこのアプローチに固執していることに気付いています。

サイトやアプリが起動されるたびに実行する初期化コードを必要とするどのようなので、それらのallUsersは一度と呼ばれ、どこでも注入さ:

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

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

    callSomeFunctionWhichRequiresAllUsers(allUsers) 
}) 
+0

@ベルギーええ、やった。 –

+0

この回答に感謝しますが、これに対する簡単な解決策があります。私はちょうど私のすべての機能でこのjsonデータを使用したい –

+0

@ JelenaK問題はありません。申し訳ありませんが、他の方法はありません。さて、同じアプローチの変種がありますが、今日の終わりには、非同期コードはコールバックや約束を使って作業することを意味します。 –

関連する問題