2013-10-13 45 views
0

我正在開發一個web應用程序,我需要播放音頻文件。在這種情況下,我試圖創建一個對象,將合併音頻對象屬性,方法和事件與一些自定義方法。javascript傳遞變量和範圍

我有以下對象創建:

<script type="text/javascript"> 
var AUDIO = { 
    track: false, 
    init: function(audioElement, fn) { 
     var _this = this; 
      _this.track = document.getElementById(audioElement) || false; 

     if (!window.HTMLAudioElement) { 
      alert(HELPER.translate('audio-load-error')); 
      _this.track = false; 
     } 
     else { 
      AUDIO.track.onloadedmetadata = (function() { 
       _this.callback(fn); 
      })(); 
     } 

     return _this.track; 
    }, 
    on: function(eventName,fn) { 
     var _this = this; 
     var listener = function(event) { 
      _this.track.removeEventListener(eventName, listener, false);  
     } 
     _this.track.addEventListener(eventName, listener, false); 
    }, 
    callback: function(fn) { 
     if (typeof fn == 'function') fn.call(this); 
     if (typeof fn == 'object') $.execCallback(fn);  
    } 

} 
</script> 

好了,現在我把我的方法是這樣的:

<script type="text/javascript"> 
AUDIO.init('audio-course', function(){ 
    console.log(AUDIO.track); 
}); 
</script> 

我想是可能通過AUDIO.track作爲通過AUDIO.init(返回的變量),所以我可以用這樣的事情?:

<script type="text/javascript"> 
AUDIO.init('audio-course', function(returnedAudioObject){ 
    console.log(returnedAudioObject.duration); 
}); 
</script> 

如果這是possib樂,請讓我知道最簡單的方法來做到這一點。提前致謝!

回答

0

我想你只是想要這個?

if (typeof fn == 'function') fn.call(this, this.track) 

然後returnedAudioObjectAUDIO.track

+0

謝謝,它工作正常! –