35

コンストラクターでプロトタイプ関数を呼び出そうとしたときに関数が定義されていないというエラーが表示され続け、何が問題なのかわかりません。

ここに私が持っているコードがあります:

function Renderer()
{
    initialiseWebGL();
    initialiseShader();
    initialiseBuffer();
}

Renderer.prototype.initialiseWebGL()
{
    //Do stuff.
};

Renderer.prototype.initialiseShader()
{
        //Do Shader's stuff
};

Renderer.prototype.initialiseBuffer()
{
        //Do Buffers
};

それの何が問題なのですか?

4

3 に答える 3

56

あなたの構文は間違っています。これを使って:

function Renderer() {
    this.initialiseWebGL();
    this.initialiseShader();
    this.initialiseBuffer();
}

Renderer.prototype.initialiseWebGL = function () {
    //Do stuff.
};

Renderer.prototype.initialiseShader = function () {
        //Do Shader's stuff
};

Renderer.prototype.initialiseBuffer = function () {
        //Do Buffers
};

その後、新しいオブジェクトを作成して、次の方法で使用できます。

var rendererInstance = new Renderer();
于 2013-01-21T14:52:00.277 に答える
13

あなたのコードにはいくつか問題があります

1.initialiseWebGl() グローバルスコープで宣言された関数を探します->関数はありません

  • this.initialiseWebGl()Objects メソッドへのアクセスに使用する必要があります
    。注:この場合thisのインスタンスを指します。Renderer

2.関数を割り当てていない代わりに、 sプロトタイプメソッドRenderer.prototype.initialiseWebGL()を呼び出そうとすると、定義されていないため、エラーが発生しますRendererinitialiseWebGl

3.{行の下に移動されるため、ブロックとして解釈されます -> このコードが実行されます。
あなたの後にそれらを持っていた場合()、構文エラーが発生します-> Renderer.prototype.initialiseWebGL() {...結果は次のようになりますUncaught SyntaxError: Unexpected token {

コメント付きの例を次に示します

function Renderer() {
    initialiseWebGL(); // I call the global declared function
    this.initialiseShader(); //I call the Prototypes function
    this.initialiseBuffer(); //Me too
}

Renderer.prototype.initialiseWebGL = function (){ //Here a function gets assigned to propertie of `Renderer`s `prototype` Object
    //Do stuff.
};

Renderer.prototype.initialiseShader = function (){
        console.log("Do Shader Stuff");
};

Renderer.prototype.initialiseBuffer = function (){
        console.log("Do initialise stuff");
};
 Renderer.prototype.initialiseBuffer() // I invoke the method above
{
 console.log("I'm a Block statement");
}; 

function initialiseWebGL () { //I'm the global declared function
  console.log("Global");
}

var ren1 = new Renderer();

/*"Do initialise stuff"  
"I'm a Block statement"  
"Global"  
"Do Shader Stuff"  
"Do initialise stuff"*/

コンソール出力でわかるように

JSBinはこちら

于 2013-01-21T15:03:33.253 に答える
4

インスタンスはプロトタイプ オブジェクトから (メソッド)プロパティを継承するため、単純な変数としてではなく、プロパティとしてアクセスする必要があります。

function Renderer() {
    this.initialiseWebGL();
    this.initialiseShader();
    this.initialiseBuffer();
}
于 2013-01-21T15:13:38.550 に答える