示例:
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'
答案 0 :(得分:3)
构造实例时,需要添加括号:
<body onload="new Controller().createObject()">
但您可以简化控制器并使用更标准的构造:
function Controller() {
self = this;
self.createObject = function(){
new ObjectTest(self);
};
self.createAlert = function(text) {
alert(text);
};
}
答案 1 :(得分:0)
您的代码被解释为命名空间,因此它尝试创建Controller.createObject
函数的实例(没有)。括号是你想要的一切
(new Controller).createObject()
// or
new Controller().createObject()
而不是
new Controller.createObject()
// which is like
new (Controller.createObject)()
答案 2 :(得分:0)
Controller
之后你错过了括号。你写道:
<body onload="new Controller.createObject()">
这基本上意味着“从Controller.createObject
创建一个新实例”,您的意思是“创建Controller
的新实例,然后调用createObject()
“:
<body onload="new Controller().createObject()">
此外,似乎Controller
更像是单身人士或“静态职业”。实际上你可以避免创建一个新实例,只需使用一个简单的Object:
var Controller = {
createObject: function () {
return new ObjectTest(this);
},
createAlert: function(text) {
alert(text);
}
}
然后从您的代码:
<body onload="Controller.createObject()">
希望它有所帮助。