2017-10-16 74 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没问题。对不起,没有其他办法。那么,有相同方法的变种,但在一天结束时,异步代码意味着使用回调或承诺。 –