JS:TypeError:this._init不是函数。 (在' this._init()',' this._init'未定义)

时间:2015-07-13 16:55:21

标签: javascript class oop typeerror

也许你会发现问题。控制台总是说:

TypeError:this._init不是函数。 (' this._init()',' this._init'未定义)

nodes = [];
for (var i = 0; i < 3; i++) {
    var newNode = new Node(i*100,0);
    nodes.push(newNode);
};

function Node(posX, posY, parent) {
    if (typeof parent === 'undefined') { parent = 0; }
    this.parent = parent;
    this.children = [];
    this.text = "Node";
    this.posX = posX;
    this.posY = posY;
    this._init();

    this._init = function() {
        alert("test");
    }
}

2 个答案:

答案 0 :(得分:1)

您需要在调用之前定义该函数:

function Node(posX, posY, parent) {
    if (typeof parent === 'undefined') { parent = 0; }
    this.parent = parent;
    this.children = [];
    this.text = "Node";
    this.posX = posX;
    this.posY = posY;

    this._init = function() {
        alert("test");
    }

    this._init();   
}

http://jsfiddle.net/4wsLhd8y/

如果您在其他地方定义函数之前调用了函数,则可能会对此感到困惑。在某些情况下,您的功能可能会被提升为#34; 到你的脚本的顶部。以下显示完全合法的调用:

isItHoisted();

function isItHoisted() {
    console.log("Yes!");
}

http://adripofjavascript.com/blog/drips/variable-and-function-hoisting

正如您现在可能已经知道的那样,对象的方法功能不会被提升,因此您会收到您所看到的错误。

答案 1 :(得分:0)

在定义之前,您似乎正在调用_init。

this._init = function() {
   alert('test');
}

this._init();