【问题标题】:How to pass object reference to another object?如何将对象引用传递给另一个对象?
【发布时间】:2012-09-15 21:04:22
【问题描述】:

示例:

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'

【问题讨论】:

    标签: javascript function reference this typeerror


    【解决方案1】:

    您错过了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()">
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

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

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

      而不是

      new Controller.createObject()
      // which is like
      new (Controller.createObject)()
      

      【讨论】:

        【解决方案3】:

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

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

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

        function Controller() {
         self = this;
         self.createObject = function(){
           new ObjectTest(self);
         };
         self.createAlert = function(text) {
          alert(text);
         };
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-23
          • 2015-09-15
          • 1970-01-01
          • 1970-01-01
          • 2022-12-04
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          相关资源
          最近更新 更多