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