我有两个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的新手,直到现在无法解决这个问题
答案 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 =
。希望它足够清楚......