Je reçois toujours une erreur en disant que mes fonctions ne sont pas définies lorsque j'essayais d'appeler les fonctions prototypes dans le constructeur et je ne sais pas ce qui ne va pas.
Voici le code que j'ai:
function Renderer()
{
initialiseWebGL();
initialiseShader();
initialiseBuffer();
}
Renderer.prototype.initialiseWebGL()
{
//Do stuff.
};
Renderer.prototype.initialiseShader()
{
//Do Shader's stuff
};
Renderer.prototype.initialiseBuffer()
{
//Do Buffers
};
Qu'est-ce qui va pas avec ça?
Votre syntaxe est incorrecte. Utilisez ceci:
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
};
Après cela, vous pouvez créer un nouvel objet et l'utiliser en:
var rendererInstance = new Renderer();
Il y a quelques problèmes avec votre code
1 .initialiseWebGl()
rechercherait une fonction déclarée dans la portée globale -> il n'y a pas de fonction
this.initialiseWebGl()
pour accéder à la méthode Objectsthis
fait référence à l'instance de Renderer
dans ce cas 2. Vous n'affectez pas une fonction avec Renderer.prototype.initialiseWebGL()
à la place, vous essayez d'appeler la méthode prototype Renderer
s initialiseWebGl
qui vous donne une erreur, car elle n'est pas définie
3.Parce que les {
Sont déplacés vers le bas d'une ligne, ils sont interprétés comme un bloc -> ce code est exécuté.
Si vous les aviez après votre ()
, Vous obtiendriez une erreur de syntaxe -> Renderer.prototype.initialiseWebGL() {...
entraînerait Uncaught SyntaxError: Unexpected token {
Voici un exemple commenté
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"*/
Comme vous pouvez le voir dans la sortie des consoles
Voici un JSBin
Puisque vos instances héritent de la (méthode) propriétés des objets prototypes, vous devez y accéder en tant que propriétés et non en tant que variables simples:
function Renderer() {
this.initialiseWebGL();
this.initialiseShader();
this.initialiseBuffer();
}