Javascript 如何在函数内部设置对象属性

Javascript 如何在函数内部设置对象属性,javascript,object,Javascript,Object,我声明了两个具有名称、链接和页面属性的对象。从Twitch API接收数据后,我向我的对象添加一个属性status,该属性在函数内部工作,但离开它后,我无法再访问status属性。我甚至尝试使用getApi设置status属性,以将状态返回为streamer0;但它也不起作用 var streamer0={name:"freecodecamp"}; streamer0.link='https://api.twitch.tv/kraken/streams/'+streamer

我声明了两个具有名称、链接和页面属性的对象。从Twitch API接收数据后,我向我的对象添加一个属性status,该属性在函数内部工作,但离开它后,我无法再访问status属性。我甚至尝试使用getApi设置status属性,以将状态返回为streamer0;但它也不起作用

    var streamer0={name:"freecodecamp"};   
    streamer0.link='https://api.twitch.tv/kraken/streams/'+streamer0.name;                    streamer0.page='https://www.twitch.tv/'+streamer0.name;
    var streamer1={name:"famasfordemacia"};  
    streamer1.link='https://api.twitch.tv/kraken/streams/'+streamer1.name;
    streamer1.page='https://www.twitch.tv/'+streamer1.name;
    var link="";
    $(document).ready(function(){
    load();
    function load(){
       for(var i=0;i<2;i++)
          {
          switch(i){
             case 0:{ 
                  link=streamer0.link;
                  getApi(streamer0);
                  console.log(streamer0.status) //it does not work
                  break;
                    }
             case 1:{ 
                  link=streamer1.link;
                  getApi(streamer1);
                  console.log(streamer1.status) //it does not work
                  break;
                  } 
          } 
    }
function getApi(x){
   $.ajax({
   type: 'GET',
   url: link,
   headers: {
  'Client-ID': 'xxxxxxxxxxxxx'
          },
       success: function(data) {
           if(data["stream"]==null)
              {
               x.status="offline";
               console.log(x.status)//works
              }
            else
              {
               x.status="online";
              }
            }
         });
        }
  });
var streamer0={name:“freecodecamp”};
拖缆0.linkhttps://api.twitch.tv/kraken/streams/'+streamer0.name;拖缆0.page=https://www.twitch.tv/'+streamer0.name;
var streamer1={name:“famasfordemacia”};
streamer1.link=https://api.twitch.tv/kraken/streams/'+1.name;
第1页https://www.twitch.tv/'+1.name;
var link=“”;
$(文档).ready(函数(){
加载();
函数加载(){

对于(var i=0;i它是一个异步调用,因此需要等待调用完成

函数getApi(x){ 返回$.ajax({ 键入:“GET”, 网址:link, 标题:{ '客户端ID':'XXXXXXXXXXXX'}});


希望它能帮助您:)

您正在使用Ajax,它是异步的,所以您有三个选择:

1-将所有代码放入成功回调中,这将是一个巨大的失误

function getApi(x) {
    $.ajax({
        type: 'GET',
        url: link,
        headers: {
            'Client-ID': 'xxxxxxxxxxxxx'
        },
        success: function (data) {
            // ALL YOUR CODE IN HERE

        }
    });
}
2-使用回调函数:

function getApi(x, callback) {
    $.ajax({
        type: 'GET',
        url: link,
        headers: {
            'Client-ID': 'xxxxxxxxxxxxx'
        },
        success: function (data) {
            // PASS YOUR DATA YOU THE CALL BACK
            callback(data);
        }
    });
}

// THEN USE IT IN THE LOAD FUNCTION AS THE FOLLOWING

function load(){
    for(var i=0;i<2;i++)
    {
        switch(i){
            case 0:{
                link=streamer0.link;

                getApi(streamer0,function(data){
                    console.log(data.status) //it does not work
                });

                break;
            }
            case 1:{
                link=streamer1.link;
                getApi(streamer1,function(data){
                    console.log(data.status) //it does not work
                });
                break;
            }
        }
    }
函数getApi(x,回调){ $.ajax({ 键入:“GET”, 网址:link, 标题:{ “客户ID”:“XXXXXXXXXXXX” }, 成功:功能(数据){ //把你的数据传给你回电话 回调(数据); } }); } //然后在加载函数中使用它,如下所示 函数加载(){
对于(var i=0;iIt是因为$.ajax是异步的。本质上,console.log(streamer0.status)发生在success函数之前。快速但不是最佳解决方案:添加到ajax选项
async:false
function getApi(x, callback) {
    $.ajax({
        type: 'GET',
        url: link,
        headers: {
            'Client-ID': 'xxxxxxxxxxxxx'
        },
        success: function (data) {
            // PASS YOUR DATA YOU THE CALL BACK
            callback(data);
        }
    });
}

// THEN USE IT IN THE LOAD FUNCTION AS THE FOLLOWING

function load(){
    for(var i=0;i<2;i++)
    {
        switch(i){
            case 0:{
                link=streamer0.link;

                getApi(streamer0,function(data){
                    console.log(data.status) //it does not work
                });

                break;
            }
            case 1:{
                link=streamer1.link;
                getApi(streamer1,function(data){
                    console.log(data.status) //it does not work
                });
                break;
            }
        }
    }