2013-04-28 1 views
0

это должно быть какой-то концепция JavaScript, что я еще не схватывая ..неопределенное чего-то, что четко определена

по какой-то причине идентификатора из thisSound возвращает неопределенное значение! Зачем??

console.log("o: "+o.id+" - "+decodeURI(soundURL)); 
// create sound 
thisSound = soundManager.createSound({ 
    id:o.id, 
    url:decodeURI(soundURL) 
}); 

console.log("thisSound: "+thisSound.id+" - "+thisSound.url); 

консоли:

o: Sound0 - http://api.soundcloud.com/tracks/76673175/stream?client_id=e992d357c0914e9b65ba17f459720fc0 

thisSound: undefined - http://api.soundcloud.com/tracks/76673175/stream?client_id=e992d357c0914e9c65ba17f459720fc0 

ответ

1

Код, который вы указали, не «явно» определяет id возвращаемого объекта.

// create sound 
thisSound = soundManager.createSound({ 
    id:o.id, 
    url:decodeURI(soundURL) 
}); 

Допустим, я пишу функцию createSound для вас:

var soundManager = { 
    createSound: function (options) { 
    // do internal magic here 
    createSound(options); 
    // return public API here 
    return { 
     getId: function() {} 
    } 
    } 
}; 

Итак, моя точка здесь является то, что если есть функция третьей стороной, вы должны следовать документы того, кто создал эту функцию , и SoundManager, по-видимому, не возвращает объект с заданным свойством id. Это «returns a SMSound object instance» - и что это за объект, пожалуйста, узнайте в документах.

0

Я ничего не знаю о библиотеке SoundCloud, хотя функция createSound кажется асинхронной ... (Это как I/O Stuff, большинство операций ввода/вывода в javascript, а другие языки - асинхронные). Возможно ли, когда вы вызвали console.log, это свойство еще не было полностью создано? Возможно, вы могли бы эмулировать поведение setInterval() с большим количеством времени, и этот код работает ... (хотя я считаю, что для этого нужно использовать функцию обратного вызова).

Смежные вопросы