javascript - 我的 Google Chrome JavaScript 控制台中的 "Uncaught TypeError: undefined is not a function"

标签 javascript

所以我明白上述错误意味着我的浏览器无法识别我尝试调用的函数。我的问题是为什么在我的特定情况下会发生这种情况。我会发布相关代码,也许你们可以帮助我。

我有一个函数

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);

关于javascript - 我的 Google Chrome JavaScript 控制台中的 "Uncaught TypeError: undefined is not a function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163529/

相关文章:

javascript - 警报 slider 输出

javascript - 响应 header 中不包含“Set-Cookie”

JavaScript SlideUp/SlideDown 使我的页脚在滑动后跳动

javascript - jquery 中每个单词的字符应大写

javascript - 将字符串中的所有 float 相乘

javascript - 在magento中使用自定义模块添加js文件后,结帐页面无法正常工作

javascript - Mongoose(或 MongoDB)中的 TransientTransactionError 是什么?

javascript - 使用 ws.onmessage = myFunc; 设置时如何删除 native websocket 处理程序或者 ws.onopen = function(){}?

内部引用对象上的 Javascript 垃圾收集器

javascript cleartimeout()问题