Peut-être trouverez-vous le problème. La console dit toujours:

TypeError: this._init n'est pas une fonction. (Dans 'this._init ()', 'this._init' n'est pas défini)

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");
    }
}
3
Hustensaft 13 juil. 2015 à 19:55

2 réponses

Meilleure réponse

Vous devez définir la fonction avant de l'appeler:

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/

Cela peut vous dérouter si vous avez appelé des fonctions avant qu'elles ne soient définies ailleurs. Sous certaines conditions, votre fonction pourrait être "hissée" en haut de votre script. Ce qui suit montre une invocation complètement légale:

isItHoisted();

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

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

Comme vous le savez probablement maintenant, les fonctions de méthode sur les objets ne sont pas levées, donc vous obtenez l'erreur que vous voyez.

1
Mister Epic 13 juil. 2015 à 17:01

Il semble que vous appeliez _init avant de le définir.

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

this._init();
0
Organiccat 13 juil. 2015 à 16:57