在Javascript中调用对象方法时,不是函数TypeError

问题:

当我尝试以这种特殊方式在JavaScript中调用对象方法时,出现以下错误:

TypeError: listener.update is not a function

我的代码:

<html>
<head>
<script src="library.js"></script>
</head>
<body>
<script>

// manages listeners etc.
function Model() {
    var  listeners = [];

    this.addListener = function(listener) {
        listeners.push(listener);
    };

    // the model will call the listeners when "setting the selection"
    this.setSelection = function() {
        for (listener in listeners)
            listener.update();
    };
};

// test function that will be used as update
function moveon() {
    var answer = confirm("Ready to move on?");
    if (answer) window.location = "http://google.com";
}

// create a model and add a listener
var model = new Model();
var listnr = {};
listnr.update = moveon;
model.addListener(listnr);
// update listener
setTimeout(model.setSelection, 2000); // this doesn't work
// setTimeout(listnr.update, 2000);   // but this does

</script>
</body>
</html>

代码说明:

Model对象管理的列表listeners,并update在某些状态更改时调用其方法。在我的示例中,这setSelection被调用时发生的

笔记:

该错误不是非常有见地,并且,如果我不评论最后一行,则listnr.update可以正常工作。

问题:

从模型调用方法时为什么会出现此错误,并且/或者如何解决此问题?

科林·格雷迪(Collin Grady)

model.setSelection不保留对对象的引用。如果不需要支持较旧的浏览器,则可以将其绑定到该对象:

model.setSelection.bind(model)

如果您确实需要担心较旧的浏览器,可以使用一个小的匿名函数:

function () { model.setSelection(); }

两种方法都将保留setSelection工作所需的对象引用

之所以listnr.update起作用,是因为它不是同一类型的函数;您构建了一个独立的非对象函数,并将该对象的引用设置到该对象中,因此它可以正常工作。但是,如果您尝试使用模型,则将无法更新对象本身。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在对象中调用方法时,Javascript中出现“未捕获的TypeError:未定义不是函数”的错误消息

来自分类Dev

TypeError:调用类方法时不是函数

来自分类Dev

TypeError:调用类方法时不是函数

来自分类Dev

在tvOS应用中从Swift调用JS函数时,“ TypeError:未定义不是对象”

来自分类Dev

TypeError:从函数调用时,null不是对象

来自分类Dev

Type = TypeError中的TypeScript调用方法:this.print不是函数

来自分类Dev

调用`useFirestoreConnect`时对象不是函数

来自分类Dev

尝试从对象调用get()或set()时得到“未捕获的TypeError:未定义不是函数”

来自分类Dev

Javascript“未捕获的TypeError:对象不是函数”

来自分类Dev

尝试在JQuery中调用函数时出现“ TypeError:c.slice不是函数”

来自分类Dev

简单的方法,而不是在javascript中反复调用函数

来自分类Dev

在 JavaScript 中调用函数时出现 JavaScript 错误,而不是在 HTML 中调用时

来自分类Dev

TypeError:对象不是在Express中显示的函数

来自分类Dev

函数本身调用时,可以在函数中调用对象的方法,但通过setTimeout调用函数时,对象未定义

来自分类Dev

“ TypeError:对象不是函数”

来自分类Dev

未捕获的TypeError:对象不是对象创建时的函数

来自分类Dev

传递调用结果时出现异常:TypeError:不是流星中的函数

来自分类Dev

在useEffect中调用Firestore时出现“未处理的拒绝(TypeError):snapshot.data不是函数”

来自分类Dev

TypeError:循环调用函数时'str'对象不可调用

来自分类Dev

在javascript中的对象内部调用对象函数

来自分类Dev

调用JavaScript中的方法和字段时避免对象

来自分类Dev

调用JavaScript中的方法和字段时避免对象

来自分类Dev

尝试通过在KonckoutJS中调用WebAPI来获取值时出现“对象不是函数”错误

来自分类Dev

对象在线程中时如何调用对象方法?红宝石(不是导轨)

来自分类Dev

在函数中初始化Gekko模块时,“ TypeError:'模块'对象不可调用”

来自分类Dev

(TypeError:预期的字符串或类似字节的对象)在Django中调用函数时

来自分类Dev

JavaScript对象和方法,但getName不是函数

来自分类Dev

TypeError:使用CSV模块时对象不是函数

来自分类Dev

创建对象时,JavaScript中使对象的成员函数调用的正确方法是什么?

Related 相关文章

  1. 1

    在对象中调用方法时,Javascript中出现“未捕获的TypeError:未定义不是函数”的错误消息

  2. 2

    TypeError:调用类方法时不是函数

  3. 3

    TypeError:调用类方法时不是函数

  4. 4

    在tvOS应用中从Swift调用JS函数时,“ TypeError:未定义不是对象”

  5. 5

    TypeError:从函数调用时,null不是对象

  6. 6

    Type = TypeError中的TypeScript调用方法:this.print不是函数

  7. 7

    调用`useFirestoreConnect`时对象不是函数

  8. 8

    尝试从对象调用get()或set()时得到“未捕获的TypeError:未定义不是函数”

  9. 9

    Javascript“未捕获的TypeError:对象不是函数”

  10. 10

    尝试在JQuery中调用函数时出现“ TypeError:c.slice不是函数”

  11. 11

    简单的方法,而不是在javascript中反复调用函数

  12. 12

    在 JavaScript 中调用函数时出现 JavaScript 错误,而不是在 HTML 中调用时

  13. 13

    TypeError:对象不是在Express中显示的函数

  14. 14

    函数本身调用时,可以在函数中调用对象的方法,但通过setTimeout调用函数时,对象未定义

  15. 15

    “ TypeError:对象不是函数”

  16. 16

    未捕获的TypeError:对象不是对象创建时的函数

  17. 17

    传递调用结果时出现异常:TypeError:不是流星中的函数

  18. 18

    在useEffect中调用Firestore时出现“未处理的拒绝(TypeError):snapshot.data不是函数”

  19. 19

    TypeError:循环调用函数时'str'对象不可调用

  20. 20

    在javascript中的对象内部调用对象函数

  21. 21

    调用JavaScript中的方法和字段时避免对象

  22. 22

    调用JavaScript中的方法和字段时避免对象

  23. 23

    尝试通过在KonckoutJS中调用WebAPI来获取值时出现“对象不是函数”错误

  24. 24

    对象在线程中时如何调用对象方法?红宝石(不是导轨)

  25. 25

    在函数中初始化Gekko模块时,“ TypeError:'模块'对象不可调用”

  26. 26

    (TypeError:预期的字符串或类似字节的对象)在Django中调用函数时

  27. 27

    JavaScript对象和方法,但getName不是函数

  28. 28

    TypeError:使用CSV模块时对象不是函数

  29. 29

    创建对象时,JavaScript中使对象的成员函数调用的正确方法是什么?

热门标签

归档