“不清楚的类型错误”;不是一个函数;在同一JavaScript文件中使用函数

“不清楚的类型错误”;不是一个函数;在同一JavaScript文件中使用函数,javascript,typeerror,Javascript,Typeerror,好的,我在几个不同的地方进行了研究,发现的大多数问题都与JQuery有关。此外-这更像是一种“越多的眼睛越好”的努力,而不是一种“教我”的努力… 不管怎样,我有一个应用程序要开发,我正在尝试使用MVC模式。因此有3个脚本:ConverterModel.js、ConverterView.js和ConverterController.js,它们按顺序加载到index.html, 也就是说: <script src="ConverterModel.js"></script>

好的,我在几个不同的地方进行了研究,发现的大多数问题都与JQuery有关。此外-这更像是一种“越多的眼睛越好”的努力,而不是一种“教我”的努力…

不管怎样,我有一个应用程序要开发,我正在尝试使用MVC模式。因此有3个脚本:
ConverterModel.js
ConverterView.js
ConverterController.js
,它们按顺序加载到
index.html
, 也就是说:

 <script src="ConverterModel.js"></script>
 <script src="ConverterView.js"></script>
 <script src="ConverterController.js"></script>
现在,我已经很久没有使用javascript了,所以我还不太习惯它的微妙之处,所以我认为这可能有点愚蠢,但是
this.setNumberClickCallbacks()
正在抛出
未捕获类型错误:this.setNumberClickCallbacks不是函数
,我无法找出原因

就像我说的,我只是想知道不止一个人在看它,而且很有可能,我明天会再看一次,它会击中我,但是我想积极主动——所以我就在这里

非常感谢您的帮助


-康纳

您需要使用

window.addEventListener("load", controller.init.bind(controller));

设置该函数的上下文。

您需要使用

window.addEventListener("load", controller.init.bind(controller));

设置该函数的上下文。

这个问题的另一个答案也很有效,虽然我没有使用它,但它让我特别关注函数(或我在问题中有时称之为“方法”)、
setNumberClickCallbacks
ConverterController
对象之间的关系,非常感谢

检查之后,我意识到我已经设置了脚本,首先将
var控制器
声明为
null
。然后在文件末尾将其定义为
ConverterController()
的新实例

这意味着在整个文件中,
var控制器
可用于引用来自同一对象的函数

简而言之,我对
init()函数做了以下更改:

view.setMenuClickCallback(this.menuButtonCallback);
this.setNumberClickCallbacks(); 
view.setMenuClickCallback(controller.menuButtonCallback);
controller.setNumberClickCallbacks();
发件人:

view.setMenuClickCallback(this.menuButtonCallback);
this.setNumberClickCallbacks(); 
view.setMenuClickCallback(controller.menuButtonCallback);
controller.setNumberClickCallbacks();
至:

view.setMenuClickCallback(this.menuButtonCallback);
this.setNumberClickCallbacks(); 
view.setMenuClickCallback(controller.menuButtonCallback);
controller.setNumberClickCallbacks();

这个问题的另一个答案也很有效,虽然我没有使用它,但它让我特别关注函数(或我在问题中有时称之为“方法”)、
setNumberClickCallbacks
ConverterController
对象之间的关系,非常感谢

检查之后,我意识到我已经设置了脚本,首先将
var控制器
声明为
null
。然后在文件末尾将其定义为
ConverterController()
的新实例

这意味着在整个文件中,
var控制器
可用于引用来自同一对象的函数

简而言之,我对
init()函数做了以下更改:

view.setMenuClickCallback(this.menuButtonCallback);
this.setNumberClickCallbacks(); 
view.setMenuClickCallback(controller.menuButtonCallback);
controller.setNumberClickCallbacks();
发件人:

view.setMenuClickCallback(this.menuButtonCallback);
this.setNumberClickCallbacks(); 
view.setMenuClickCallback(controller.menuButtonCallback);
controller.setNumberClickCallbacks();
至:

view.setMenuClickCallback(this.menuButtonCallback);
this.setNumberClickCallbacks(); 
view.setMenuClickCallback(controller.menuButtonCallback);
controller.setNumberClickCallbacks();

当您将引用传递给
.addEventListener()
时,对象与该“方法”之间的关系将丢失。当您将引用传递给
.addEventListener()
也works@eithed谢谢你们的回答——这让我从不同的角度来看待它,我已经设法弄明白我一开始打算做什么。为了让其他可能处于类似情况的人明白这一点,我发布了自己的答案,并将其标记为问题的答案,因为这是我实现的答案。如果你愿意,你可以看一看并给我任何反馈!再次感谢-Conner
window.addEventListener(“加载”,函数(){controller.init();})也works@eithed谢谢你们的回答——这让我从不同的角度来看待它,我已经设法弄明白我一开始打算做什么。为了让其他可能处于类似情况的人明白这一点,我发布了自己的答案,并将其标记为问题的答案,因为这是我实现的答案。如果你愿意,你可以看一看并给我任何反馈!再次感谢-康纳