1

例子:

JS文件:

function Controller() {
 self = this;

 self.createObject = createObject;
  function createObject() {
   new ObjectTest(self);
  }

 self.createAlert = createAlert;
 function createAlert(text) {
  alert(text);
 }
}

function ObjectTest(controller) {
 this.controller = controller;
 this.controller.createAlert("test");
}

HTML 文档 - 构造对象并执行方法

<body onload="new Controller.createObject()">

这将给出错误消息:

Uncaught TypeError: Object #<Controller> has no method 'createAlert'
4

3 回答 3

3

构造实例时,需要加括号:

<body onload="new Controller().createObject()">

但是您可以简化控制器并使用更标准的构造:

function Controller() {
 self = this;
 self.createObject = function(){
   new ObjectTest(self);
 };
 self.createAlert = function(text) {
  alert(text);
 };
}
于 2012-09-24T11:47:23.363 回答
0

您的代码被解释为命名空间,因此它会尝试创建Controller.createObject函数的实例(没有)。括号就是一切,你想要

(new Controller).createObject()
// or
new Controller().createObject()

代替

new Controller.createObject()
// which is like
new (Controller.createObject)()
于 2012-09-24T11:52:39.960 回答
0

你错过了后面的括号Controller。你写了:

<body onload="new Controller.createObject()">

这基本上意味着“从Controller.createObject创建一个新实例,您的意思是“创建一个新实例Controller,然后调用createObject()

<body onload="new Controller().createObject()">

此外,它似乎Controller更像是一个单例或“静态类”。您实际上可以避免创建一个新实例,只需使用一个简单的对象:

var Controller = {
    createObject: function () {
        return new ObjectTest(this);
    },

    createAlert: function(text) {
        alert(text);
    }
}

然后从您的代码中:

<body onload="Controller.createObject()">

希望能帮助到你。

于 2012-09-24T11:55:02.953 回答