javascript传递变量和作用域

javascript传递变量和作用域,javascript,object,callback,parameter-passing,Javascript,Object,Callback,Parameter Passing,我正在开发一个网络应用程序,我需要播放音频文件。在本例中,我尝试创建一个对象,该对象将音频对象属性、方法和事件与一些自定义方法合并 我已创建以下对象: <script type="text/javascript"> var AUDIO = { track: false, init: function(audioElement, fn) { var _this = this; _this.track = document.getE

我正在开发一个网络应用程序,我需要播放音频文件。在本例中,我尝试创建一个对象,该对象将音频对象属性、方法和事件与一些自定义方法合并

我已创建以下对象:

<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>

var音频={
轨道:错误,
初始化:函数(audioElement,fn){
var_this=这个;
_this.track=document.getElementById(audioElement)| | false;
如果(!window.HTMLAudioElement){
警报(HELPER.translate('audio-load-error'));
_this.track=false;
}
否则{
AUDIO.track.onloadedmetadata=(函数(){
_这是回调(fn);
})();
}
返回_this.track;
},
on:函数(eventName,fn){
var_this=这个;
var listener=函数(事件){
_this.track.removeEventListener(eventName,listener,false);
}
_this.track.addEventListener(eventName,listener,false);
},
回调:函数(fn){
if(typeof fn=='function')fn.call(this);
if(typeof fn=='object')$.execCallback(fn);
}
}
好的,现在我把我的方法称为:

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

init('AUDIO-course',function(){
控制台.log(音频.track);
});
我想要的是,可以通过AUDIO.init()将AUDIO.track作为返回变量传递,这样我就可以使用类似的东西了

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

init('AUDIO-course',函数(returnedAudioObject){
日志(返回的AudioObject.duration);
});

如果可能的话,请告诉我最简单的方法。提前谢谢

我想你就是想要这个

if (typeof fn == 'function') fn.call(this, this.track)
然后
returnedAudiooObject
将成为
AUDIO.track