在构造函数中的Javascript调用函数原型(Javascript calling prototy

2019-07-18 12:12发布

我不断收到一个错误,指出我的函数不作定义,当我试图调用函数原型在构造函数中,我不知道什么不妥的地方。

下面是我的代码:

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

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

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

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

有什么不对呢?

Answer 1:

你的语法是错误的。 用这个:

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();


Answer 2:

有几件事你的代码错误

1. initialiseWebGl()将寻求在全球范围内声明的函数- >没有功能

  • 您应该使用this.initialiseWebGl()来访问对象的方法
    注: this指的实例Renderer在这种情况下,

2.You未分配与一个函数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



Answer 3:

由于您的情况下继承了原型对象(方法) 的属性 ,你需要访问它们的性质,而不是作为普通变量:

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


文章来源: Javascript calling prototype functions in constructor