javascript传递变量和范围

时间:2013-10-13 00:41:18

标签: javascript object callback parameter-passing

我正在开发一个网络应用程序,我需要播放音频文件。在这种情况下,我正在尝试创建一个将音频对象属性,方法和事件与一些自定义方法合并的对象。

我创建了以下对象:

<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.init()将AUDIO.track作为返回变量传递,所以我可以使用这样的东西吗?:

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

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

1 个答案:

答案 0 :(得分:0)

我想你只想要这个?

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

然后returnedAudioObject将为AUDIO.track