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

访问另一个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

我有两个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;
    }
};
[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模块。我发布它们供其他团队使用/嵌入。由于我负责这些内容的质量,我需要确保其他团队不会修改它们,即使不是有意修改。如果他们愿意,他们必须修改我自己的代码,这将我从责任中解放出来……但我同意:这是一个非常特殊的场景;