"未捕获的类型错误:未定义的不是函数“;在我的Google Chrome JavaScript控制台中

"Uncaught TypeError: undefined is not a function" in my Google Chrome JavaScript console

本文关键字:我的 函数 Google Chrome 控制台 JavaScript 未定义 quot 类型 错误      更新时间:2023-09-26

所以我知道上面的错误意味着我的浏览器无法识别我试图调用的函数。我的问题是,为什么在我的特殊情况下会发生这种情况。我会发布相关代码,也许你们能帮我。

我有一个功能

function homepage_screensaver()
{
    // ... bunch of lines here .... 
    var circwrapper = new Array(mycirc, theta);
    document.setInterval(move_obj(circwrapper, papwidth, papheight), 100);
}

正如你所看到的,它调用了我现在正在构建的另一个函数:

function move_obj(obwrap, bckwid, bckht)
{
     var c = obwrap[1]; 
     var t = obwrap[2]; 
     var bb = c.getBBox(); 
     // ... bunch of lines here ...      
}

我收到的错误在var bb = c.getBBox();线上。

我有预感。我认为这个问题与我试图将对象包装在数组中,然后打开包装并调用其上的函数有关。也许浏览器找不到对象的成员函数,因为它根本不知道它是什么类型的对象。

(我知道我创建了一个包装类在功能上是无用的,但这是为了我自己的可读性。)

不管怎样,这里的解决方案是什么?

您的问题只是obwrap[1](函数外的theta)没有getBBox属性。您可能打算访问obwrap[0](即mycirc)。此外,您的数组没有索引2,因此下面的行可能应该改为obwrap[1]

然而,一旦你解决了这个问题,你的代码就会立即在另一个地方出现另一个问题:

按照当前编写代码的方式,setInterval将尝试调用move_obj(circwrapper, papwidth, papheight)返回的结果。您的代码与相同

var result_of_move_obj = move_obj(circwrapper, papwidth, papheight);
setInterval(result_of_move_obj, 100);

注意,move_obj只被调用一次,然后move_obj结果在此后被周期性地调用。

如果move_obj函数以return undefined;结束(或者没有return语句,这是一样的),那么setInterval将尝试调用undefined,这显然是行不通的。

相反,您希望将调用封装在一个匿名函数中:

setInterval(function() { move_obj(circwrapper, papwidth, papheight) }, 100);