【问题标题】:Calling an object declared like a function调用像函数一样声明的对象
【发布时间】:2012-12-27 20:47:47
【问题描述】:

在下面的代码中,我试图调用一个声明为对象的方法。我将如何调用该函数?

var draw = function() {
    anotherFunction();
}

draw();

我收到一个错误“TypeError:对象 [对象窗口] 的属性‘绘制’不是函数”

谢谢。

【问题讨论】:

  • var draw 定义在哪里?在另一个函数内部?
  • 上面的代码运行良好,你能把你的完整代码贴出来,让我们看看它在哪里被调用吗?
  • 在我看来这段代码应该可以工作。
  • 如果您的 var 语句在全局范围内,那将可以正常工作。根据您的错误消息,draw 在您调用它的范围内不可见。
  • 您的代码应该没有问题。您很可能在 draw 函数周围遇到另一个问题,这是真正的错误并导致 draw 未定义(例如缺少匹配 () 或 {})。

标签: javascript function object methods


【解决方案1】:

快速 Javascript 作用域课程;当你这样做时:

 function someFunction() {
      var foo = 'bar';
 }
 someFunction();
 // foo doesn't exist

foo 变量只存在于执行 someFunction 所需的时间;之后就没有了。

你可以通过在“全局对象”上设置 foo 来解决这个问题,即。 “窗口”:

 function someFunction() {
      window.foo = 'bar';
 }
 someFunction();
 // foo does exist!

但是,除非您的站点非常小,否则很快就会变得一团糟(编程语言有作用域是有原因的:将所有内容放在全局空间中很难处理)。

因此,您真正需要做的是更仔细地查看创建 foo 的内容(好吧,在您的情况下为 draw)和使用 foo 的内容(draw),看看是否不能让两者更接近一起,或者让创建draw的函数返回它,或者类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多