Dan*_*nny 33 javascript methods prototype class
当我试图在构造函数中调用原型函数时,我不断收到错误,说我的函数没有定义,我不知道它有什么问题.
这是我的代码:
function Renderer()
{
initialiseWebGL();
initialiseShader();
initialiseBuffer();
}
Renderer.prototype.initialiseWebGL()
{
//Do stuff.
};
Renderer.prototype.initialiseShader()
{
//Do Shader's stuff
};
Renderer.prototype.initialiseBuffer()
{
//Do Buffers
};
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
Min*_*hev 52
你的语法错了.用这个:
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
};
Run Code Online (Sandbox Code Playgroud)
之后,您可以创建新对象并通过以下方式使用它:
var rendererInstance = new Renderer();
Run Code Online (Sandbox Code Playgroud)
Mor*_*ler 11
您的代码存在一些问题
1. initialiseWebGl() 将寻找在全局范围内声明的函数 - >没有函数
this.initialiseWebGl()访问对象方法this引用实例Renderer2.你没有分配一个函数Renderer.prototype.initialiseWebGL()而是试图调用Renderers原型方法initialiseWebGl,它给你一个错误,因为它没有定义
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"*/
Run Code Online (Sandbox Code Playgroud)
正如您在控制台输出中看到的那样
这是一个JSBin