在另一个javascript文件中访问对象

时间:2014-08-01 08:13:30

标签: javascript

我有两个JS文件

我创建媒体的Player.js

(function() {

function Media(){
        this.url = "";
}

Media.prototype.setURL = function(url){
    this.url = url;
    alert("setURL="+this.url);
}

})();

另一个文件是Main.js,我访问此媒体,如下所示

var media = new Media();
Main.keyDown = function(){
    var keyCode = event.keyCode;
    alert("Key pressed: " + keyCode);

    switch(keyCode){
       case tvKey.KEY_1:
            alert("Key 1 pressed");
            media.setURL("1-link");
            break;
    }
};

我有一个index.html,其中包含了这些脚本

<script language="javascript" type="text/javascript" src="app/javascript/dash-player.js"></script>
<script language="javascript" type="text/javascript" src="app/javascript/Main.js"></script> 

问题是我从Main.js访问此媒体时遇到错误,如下所示

[JS ERROR]:
File:           Main.js
Line No:        3
Error Detail:   ReferenceError: Can't find variable: Media

我尝试了各种各样的东西,但因为我是Javascript的新手,直到现在无法解决这个问题

2 个答案:

答案 0 :(得分:2)

Media仅在Player.js的IIFE中定义。删除(function() { ... })();包装。

答案 1 :(得分:0)

尝试:

var Media = (function() {

function Media(){
        this.url = "";
}

Media.prototype.setURL = function(url){
    this.url = url;
    alert("setURL="+this.url);
}

return Media;

})();

然后,您将保留Media原型的分隔命名空间,但您可以从oustide访问Media对象以实现它。 我没有测试这段代码,但在实现模块或插件时我常常这样做。


可能对(function(){})()语法有一点解释:

  • 第一个(表示您创建命名空间:内部设置的所有变量都不会存在于外部。相比之下,可以修改外部变量。
  • 函数function(){}是您的功能代码。您可以注意到它返回您刚刚创建的“媒体”对象。
  • )表示您关闭命名空间。
  • ,最后一个()表示您执行上一个代码(也就是命名空间代码(function(){})。由于此代码返回Media对象,您可以将其保存到外部可访问变量(aka开头的var Media =

希望它足够清楚......