访问另一个javascript文件中的对象
我有两个JS文件 Player.js,我在其中创建媒体访问另一个javascript文件中的对象,javascript,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.key
(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;
}
};
[JS ERROR]:
File: Main.js
Line No: 3
Error Detail: ReferenceError: Can't find variable: Media
我有一个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>
我尝试过各种方法,但由于我不熟悉Javascript,至今无法解决此问题媒体仅在Player.js的iLife中定义。删除函数{…};包装器。尝试:
var Media = (function() {
function Media(){
this.url = "";
}
Media.prototype.setURL = function(url){
this.url = url;
alert("setURL="+this.url);
}
return Media;
})();
然后,您将为媒体原型保留单独的名称空间,但您可以从oustide访问媒体对象以实例化它。
我没有测试这段代码,但我在实现模块或插件时经常这样做
可能需要对函数{}语法进行一些解释:
第一种方法是创建名称空间:内部设置的所有变量都不存在于外部。相反,外部变量可以访问,也可以修改。
函数{}是您的函数代码。您可以注意到它返回您刚刚创建的“媒体”对象。
这意味着关闭名称空间。
最后一种方法是执行前面的代码,也就是名称空间代码函数{}。由于此代码返回媒体对象,因此可以将其保存到一个可从外部访问的变量中,即开始时的var Media=。
希望它足够清晰…或者更好,保留它,确保只导出需要导出的符号。当然,在这种情况下,这与只有媒体是一样的……是的,保留名称空间确保原型不能被外部代码修改。基本上,所有插件都是这样做的。我认为他应该保留它,但让它返回对象并保存它。请看我的答案。@Abhishekdix您的优雅是导致您的代码无法工作的原因。也许在使用您不完全理解的语法之前,您应该先简单一点?呃。。。这并不能阻止人们使用Media.prototype.somethingNew=function…@NiettheDarkAbsol:在这个用例中,我想你是对的。它只允许您创建局部变量,如专用计数器或标志。通常,我不是返回对象,而是通过添加实例化对象$的函数在名称空间中扩展jquery;这可以防止修改原型,对吗?是的。但你想阻止谁?@NiettheDarkAbsol:在开源世界?没有人但是我在工作中做了一些javascript模块。我发布它们供其他团队使用/嵌入。由于我负责这些内容的质量,我需要确保其他团队不会修改它们,即使不是有意修改。如果他们愿意,他们必须修改我自己的代码,这将我从责任中解放出来……但我同意:这是一个非常特殊的场景;