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

You missed the parenthesis after Controller. You wrote:

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

That basically means "create a new instance from Controller.createObject" where you meant "create a new instance of Controller, then call createObject()":

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

Also, it seems that Controller is more like a singleton or a "static class". You could actually avoid to create a new instance then, just using a simple Object:

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

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

And then from your code:

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

Hope it helps.

于 2012-09-24T11:55:02.953 に答える