无法从 javascript 访问对象

问题描述

在我的 ASP.NET MVC 应用程序中,..\Views\Shared_Layout.cshtml 我有以下代码行:

> <script type="text/javascript" src="http://mycontrols.com/Scripts/MyConstants.js"></script>

文件 MyConstants.js 包含以下内容

var MyConstants = function() {
   return {
       DataObject1: {
          MyEnum1: {
             Item0: 0,Item1: 1,Item3: 2
          }
       },DataObject2: {
          MyEnum2: {
             Item0: 0,Item3: 2
          }
       }
   };
};

现在,从我的观点 (Index.cshtml) 来看,我试图在 javascript 中访问 MyEnum1 中的一个项目:

var myEnum = MyConstants.DataObject1.MyEnum1.Item1;

但它不起作用,在 chrome 中的错误 en devtools 下方:

jQuery.Deferred 异常:无法读取未定义的属性 'MyEnum1' 类型错误:无法读取未定义的属性“MyEnum1”

解决方法

MyConstants 是一个返回对象的函数,因此您需要调用它:

var myEnum = MyConstants().DataObject1.MyEnum1.Item1; 

如果您希望保留当前语法来检索值,则需要将 MyConstants 转换为对象:

var MyConstants = {
  DataObject1: {
    MyEnum1: {
      Item0: 0,Item1: 1,Item3: 2
    }
  },DataObject2: {
    MyEnum2: {
      Item0: 0,Item3: 2
    }
  }
};