当我试图在构造函数中调用原型函数时,我一直收到错误,说我的函数没有定义,我不知道它有什么问题。
这是我的代码:
function Renderer()
{
initialiseWebGL();
initialiseShader();
initialiseBuffer();
}
Renderer.prototype.initialiseWebGL()
{
//Do stuff.
};
Renderer.prototype.initialiseShader()
{
//Do Shader's stuff
};
Renderer.prototype.initialiseBuffer()
{
//Do Buffers
};
它出了什么问题?
答案 0 :(得分:50)
你的语法错了。使用此:
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 :(得分:11)
您的代码存在一些问题
1. initialiseWebGl()
将查找在全局范围内声明的函数 - >没有功能
this.initialiseWebGl()
来访问对象方法this
指的是Renderer
的实例 2.您没有使用Renderer.prototype.initialiseWebGL()
分配函数,而是尝试调用Renderer
的原型方法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"*/
正如您在控制台中看到的输出
继承人JSBin
答案 2 :(得分:4)
由于您的实例从原型对象继承(方法)属性,您需要将它们作为属性而不是纯变量来访问:
function Renderer() {
this.initialiseWebGL();
this.initialiseShader();
this.initialiseBuffer();
}