2017-10-16 241 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); 
 
    } 
 
())

我不想實現的是將這個用戶列表作爲我的對象屬性,如某些數組中的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

@Bergi是的,完成了。 –

+0

感謝這個答案,但有沒有任何簡單的解決方案。我只是想在我的所有功能中使用這個json數據 –

+0

@JelenaK沒問題。對不起,沒有其他辦法。那麼,有相同方法的變種,但在一天結束時,異步代碼意味着使用回調或承諾。 –