对象未定义或为null

时间:2013-04-08 14:03:33

标签: javascript jquery asp.net-mvc

我写了一个名为global.js的JavaScript文件,其中包含以下内容:

;

var Globals = 
{
    function getAppRoot() {
        if (typeof (jQuery) !== "undefined")
            return $("#ApplicationRoot").attr("href");
    };

    appRoot : getAppRoot();
};

然后在我的HTML文件(ASP.NET MVC项目)中,我包含了我的JavaScript文件:

<link rel = "home" id = "ApplicationRoot" 
    href = "@Url.Content("~/")" />

<script src = "@Url.Content("~/Scripts/jquery-1.8.3.js")" 
    type="text/javascript"></script>

<script src = "@Url.Content("~/Scripts/global.js")" 
    type = "text/javascript"></script>

然后,在HTML文件中,在SCRIPT标记内,我写道:

$(document).ready( 
    function() { 
        alert("Globals.appRoot = " + window.Globals.appRoot); 
    } );

但是,当我运行代码时,它告诉我Globals未定义。

更新 谢谢你们。我只是注意到我忘记了等号(赋值运算符)。

我现在观察到的另一个重要的事情(我不完全确定)是:我从你的评论中假设一个像这样的对象声明:

var foo = { /* cannot have anything that does not adhere to the bar : gar syntax? */ }

另一个更新 问题是:如果我通过这样做appRoot方法:

var Globals = 
{
    appRoot : function() { }
};

或者像这样:

var Globals = 
{
    appRoot : function getAppRoot() { }
}

客户端必须使用一组以下括号调用appRoot。我希望appRoot成为属性而不是方法。我该怎么做?

最终更新 我现在已将我的代码更改为如下所示:

// globals.js
// I understand that the starting semi-colon is not 
// required. I'd left it in for reasons that it is used
var Globals = 
{
    appRoot : $("#ApplicationRoot").attr("href");
};


// inside the HTML file in $(document).ready();

if (tyepof(Globals) == "undefined" || Globals == null)
  alert("Globals is either undefined or null");
else
  alert("Globals.appRoot = " + Globals.appRoot);

我收到警告消息 Globals未定义或为空

ANSWER 好的,最后。感谢你的帮助。我在Globals对象的对象声明/初始化中有另一个小的语法错误。

由于appRoot是对象的成员,并且我使用了对象初始化器语法,所以我不应该用分号终止appRoot的声明。相反,我要么使用逗号,要么只留下它没有任何终止字符,因为它是最后一个(Globals的唯一成员)。

2 个答案:

答案 0 :(得分:3)

你需要重写你的globals.js,这样的事情应该有效:

var Globals = {
    appRoot : function() {
        if (typeof (jQuery) !== "undefined") {
            return $("#ApplicationRoot").attr("href");
        }
    }
};

答案 1 :(得分:2)

您的global.js看起来应该更像这样:

//; << not needed
var Globals = /*equal to missing*/
{
    appRoot : function getAppRoot() {
        if (typeof (jQuery) !== "undefined")
            return $("#ApplicationRoot").attr("href");
    }
};