コンストラクターでプロトタイプ関数を呼び出そうとしたときに関数が定義されていないというエラーが表示され続け、何が問題なのかわかりません。
ここに私が持っているコードがあります:
function Renderer()
{
initialiseWebGL();
initialiseShader();
initialiseBuffer();
}
Renderer.prototype.initialiseWebGL()
{
//Do stuff.
};
Renderer.prototype.initialiseShader()
{
//Do Shader's stuff
};
Renderer.prototype.initialiseBuffer()
{
//Do Buffers
};
何が問題なのですか?
構文が間違っています。これを使って:
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();
あなたのコードにはいくつかの間違いがあります
1。initialiseWebGl()
はグローバルスコープで宣言された関数を探します->関数はありません
this.initialiseWebGl()
を使用してObjectsメソッドにアクセスする必要がありますthis
は、この場合のRenderer
のインスタンスを指します2. Renderer.prototype.initialiseWebGL()
を使用して関数を割り当てているのではなく、Renderer
sプロトタイプメソッドinitialiseWebGl
を呼び出そうとしていますが、定義されていないためエラーが発生します
3. {
は1行下に移動するため、ブロックとして解釈されます->このコードが実行されます。()
の後にそれらがあった場合、構文エラーが発生します-> 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"*/
コンソールで見ることができるように
Heres a JSBin
インスタンスはプロトタイプオブジェクトから(メソッド)プロパティを継承するため、プレーン変数としてではなくプロパティとしてインスタンスにアクセスする必要があります。
function Renderer() {
this.initialiseWebGL();
this.initialiseShader();
this.initialiseBuffer();
}