如何将对象引用传递给另一个对象?

时间:2012-09-24 11:46:16

标签: javascript function reference this typeerror

示例:

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'

3 个答案:

答案 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()">

希望它有所帮助。