2012-03-11 21 views
0

私は、関数のコンストラクタ引数として参照を取得するJavaScriptクラスを作成しました。このクラスには、コンストラクタに渡された参照された関数のinit()関数を呼び出すinit()関数があります。ただし、this.aFunction.init()が未定義であるというエラーが発生します。クラス内から関数への参照の関数を呼び出すことができません

これはコードです:

function AClass(aFunction) { 
    this.aFunction = aFunction; 
} 

AClass.prototype.init = function() { 
    this.aFunction.init(); 
} 

var aClass = new AClass(function() { 
    return { 
     init: function() { 
      alert('success'); 
     } 
    }; 
}); 

alert('Before init');    
aClass.init(); 

私がjsFiddleを設置しました:http://jsfiddle.net/sbel/8cgpH/3/

+2

あなたaFunctionもここでコードを表示し、あなたのコードを参照してあなたの質問を入力してください。 – Marcin

+0

javascriptにはクラスがありません。 'AClass'はコンストラクタ関数です。 – KooiInc

答えて

1

あなたは単にあなたをパラメータhttp://jsfiddle.net/8cgpH/5/

var aClass = new AClass(function() { 
    return { 
     init: function() { alert('success'); } 
    }; 
}); 

を参照して、一つの機能を実行するのを忘れAClassに渡すことは、一度呼び出されるとメソッドinit()を含むオブジェクトを返す関数です(tを実行するのを忘れた帽子) - 言い換えれば、あなたはクラスを渡しているだけで、そのクラスのインスタンスは渡していません。

var aClass = new AClass(function() { 
    return { 
     init: function() { alert('success'); } 
    }; 
}()); // <--- 
1

あなたの関数は何かを返します。関数自体には、プロパティinitはありません。関数を呼び出してそのプロパティを持つオブジェクトを取得します(aFunctionはもはや関数ではありませんが、代わりにinitを持つオブジェクトなので、名前は少し曖昧です)http://jsfiddle.net/8cgpH/8/

this.aFunction = aFunction(); 
1

あなたは、その戻り値を取得するためにコールaFunctionする必要があります。あなたがやっていることは、存在しない関数オブジェクト自身の中のプロパティinitを探しているところです。

AClass.prototype.init = function() { 
    this.aFunction().init(); 
};

Here's a demo.

0
var aClass = new AClass({ 
     init: function() { alert('success'); } 
}); 

ちょうどOBJ

関連する問題