【问题标题】:JavaScript: What's wrong with this constructor?JavaScript:这个构造函数有什么问题?
【发布时间】:2010-07-04 21:32:04
【问题描述】:

我不完全确定如何在 JS 中实现对象。

这是一个构造函数:

function FooList(arg1, arg2, arg3, arg4, arg5, arg6, arg7)
{
    alert("constructing");
    this._arg1 = arg1;
    this._arg2 = arg2;

    this.refresh();
}

我想在这里称呼它:

FOO_LIST = new FooList(
    arg1,
    arg2,
    arg3,
    arg4,
    arg5,
    arg6,
    arg7
);

当我拥有所有 7 个参数时,它不起作用。 (构造函数中没有断点被命中;警报不会触发。另外,包含上述代码的方法停止执行。)

但是,这确实会导致警报触发:

FOO_LIST = new FooList();

我在这里做错了什么?

更新也许这是定义构造函数的更好方法:

FooList = function() { }

而不是

function FooList() { }

但是,即使使用前一种方法,它仍然不起作用。

更新 2: 看起来 Spinon 和 Russ Cam 的 cmets 是正确的。当我尝试评估它时,其中一个 args 默默地失败了。

【问题讨论】:

  • 变量arg1-7定义了吗?
  • 当您使用 7 个参数时,您传递的参数是什么?
  • @felix 是的,它们是,@tarantula:jquery 对象、字符串和回调。
  • 它对我来说很好,就像你在你的问题中有它一样。我应该补充一点,我只是用 args 的整数值调用它。检索其中一个参数时可能会发生异常。
  • 基于它既不适用于函数声明也不适用于函数表达式的事实,听起来您传递给函数构造函数的参数有问题。如果您可以在上下文中发布代码,我可能会提供进一步的帮助。

标签: javascript oop constructor


【解决方案1】:

在最后一个 arg 后面有一个逗号,这将导致 JavaScript 引擎出现问题。

此外,最好在FOO_LIST 前面使用var,即使它是故意的全局变量,因为这是一个对所有变量声明都养成的好习惯,可以避免潜在的问题将来会覆盖全局变量。

如果您的函数具有像这样的许多参数,您可能希望使用 arguments 对象并对其进行索引以获取 args 1-7。

【讨论】:

  • 抱歉,这是我自己在页面中输入的拼写错误。
  • 当您没有向我们展示正在运行的代码时,询问“为什么这段代码不起作用”并不是解决问题的好方法。当示例代码适用于试图提供帮助的人时更是如此;)
猜你喜欢
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2012-02-10
相关资源
最近更新 更多