【问题标题】:javascript OOP - not a functionjavascript OOP - 不是函数
【发布时间】:2015-12-04 11:21:35
【问题描述】:

我想像 MVC 模式一样构建我的 JS 代码。

当一个站点像 index.php 一样被加载时,控制器对象就会被创建。并调用了一个函数。

在 Controller.js 文件中,此函数创建一个模型对象。

但我收到一条错误消息,指出模型不是函数。

文件索引.php

<script>
    var mController = new Controller();
    mController.load();
</script>

文件控制器.js

 function Controller() 
 {
     console.log('IN CONTROLLER'); // OUTPUT: IN CONTROLLER 

     this.load = function()
     {
         var mModel = new Model(); // OUTPUT: Model is not a function
         mModel.load();
     }
 }

文件 Model.js

function Model() 
{
    this.load = function() { ... }
}

更新:错误是变量和函数的名称相同。

【问题讨论】:

  • 我会把你的变量称为函数名以外的东西。我猜这是一个命名冲突问题。
  • thx :) 确实是命名冲突问题

标签: javascript oop model-view-controller typeerror


【解决方案1】:

你有一些错误:

首先:你有一个 var 和一个类/函数,它们在中具有相同的名称:

var Controller = new Controller();

这不好,因为一个可能会混淆另一个。改变那个名字。 vars 按照惯例也以小写字母开头,以区别于函数。

那么,这一行:

this.load() = function()

应该是:

this.load = function()

那么,如果您收到“模型不是函数”消息,可能是因为您没有按正确的顺序放置 js 文件。 Model.js 应该在 html 中的 Controller.js 之前出现。请包括加载这些文件的 html 部分。我应该或多或少是这样的:

<script type="text/javascript" src="Model.js"></script>
<script type="text/javascript" src="Controller.js"></script>

希望对你有帮助。

【讨论】:

  • 这是名称的原因。 Ouu代码中的行是对的,只是写错了,thx关于文件顺序的输入,我不知道
  • 有一些框架和开发风格可以让你更好地控制像 require.js 这样加载的文件。看一看:requirejs.org 也了解 AMD 和 CommonJs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 2013-01-29
  • 1970-01-01
  • 2016-09-10
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多