简体   繁体   English

javascript传递变量和范围

[英]javascript passing variables and scopes

I am developing an web app and i need to play audio files. 我正在开发一个Web应用程序,我需要播放音频文件。 In this case I'm trying to create an object that will merge audio object properties, methods and events with some custom methods. 在这种情况下,我尝试创建一个对象,该对象将音频对象属性,方法和事件与某些自定义方法合并。

I have the following Object created: 我创建了以下对象:

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

OK, now I call my methods something like this: OK,现在我将我的方法命名为:

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

What I want is that is possible to pass AUDIO.track as a returned variable by AUDIO.init() so I can use something like this?: 我想要的是可以通过AUDIO.init()将AUDIO.track作为返回变量传递,这样我可以使用类似的东西吗:

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

If this is possible, please let me know the easiest way to do this. 如果可以的话,请告诉我最简单的方法。 Thanks in advance! 提前致谢!

I think you just want this? 我想你只想要这个吗?

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

Then returnedAudioObject will be AUDIO.track . 然后returnedAudioObject AUDIO.track将是AUDIO.track

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM