【问题标题】:Access enumeration member of an object in JavaScript在 JavaScript 中访问对象的枚举成员
【发布时间】:2013-12-26 13:06:40
【问题描述】:

我正在尝试将“选项”对象传递给另一个对象的构造函数。 选项有我尝试在另一个文件中读取的枚举。

js/mainApp.js:

square = new World(20, 20, null, 0);

var opts = new Options(MODE.SINGLE, REGION.MIDDLE_EAST);
world = new World(0, 0, "img/whatever.png", opts);

js/options.js:

var MODE = {
    SINGLE : 1,
    MULTI  : 2
};

var REGION = {
    MIDDLE_EAST : { xTranslate : -2300, yTranslate: -700, scale : 1.2}
};

function Options(MODE, REGION) {
    this.mode = MODE;
    this.region = REGION;
}

现在在 World 构造函数中,我收到第二个警报的错误“opts.region is undefined”。出于某种原因,第一个警报显示预期的“{ xTranslate : -2300, yTranslate: -700, scale : 1.2}

js/options.js:

var World = ExtendingSomething.extend(
{
    initialize: function(x, y, imageURL, opts) {
        alert (JSON.stringify(opts.region));
        alert (JSON.stringify(opts.region.scale));
        ...
    }
}
);

编辑:我添加了一些信息

我不明白为什么我在运行时收到此错误is undefined in this jsfiddle(感谢 Thomas C. G. de Vilhena 的创作)。

也许是我使用不同的文件有问题? 仍然:为什么调用opts.region没有问题,但是我一调用opts.region.scale,就会出现错误opts.region is undefined(不是opts.region.scale!)。

<script type="text/javascript" src="js/mainApp.js"></script>
<script type="text/javascript" src="js/options.js"></script>
<script type="text/javascript" src="js/world.js"></script>

编辑:我需要添加另一行代码来理解问题

【问题讨论】:

  • ExtendSomething.extend 似乎缺少右括号,但除此之外,您发布的代码对我来说看起来还不错。为什么不创建一个 JSFiddle sn-p?
  • 我添加了右括号。什么是 JSFiddle sn-p?
  • @Sadik, jsfiddle.net
  • This jsfiddle 工作正常。它与您提供的代码有点不同。
  • 我能看到的唯一区别是:1.) 我使用 world 作为具有初始化函数的子类,2.) 不同的函数出现在单独的文件中。我仍然不明白为什么会收到 is undefined 错误。

标签: javascript object constructor enumeration member


【解决方案1】:

问题是带有错误参数的构造函数调用。 应该有某种类型检查,否则会给出 TypeError。

删除对构造函数的任何错误调用或添加检查

square = new World(20, 20, null, 0);

【讨论】:

    【解决方案2】:

    脚本文件应按以下顺序加载。

    <script type="text/javascript" src="js/options.js"></script>
    <script type="text/javascript" src="js/world.js"></script>
    <script type="text/javascript" src="js/mainApp.js"></script>
    

    似乎我们甚至在加载对象之前就在使用它们。

    【讨论】:

    • 谢谢,我不知道。但这并没有解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2010-12-11
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多