2010-11-25 24 views
0

J'essaie d'appeler une fonction de classe:Javascript appeler une fonction de classe

// Gantt chart object 
function ganttChart(gContainerID) { 

    this.isDebugMode = true;         // Is this chart in debug mode 
    this.gContainer = document.getElementById(gContainerID); // The container the chart is built inside 
    this.gDebugPannel;           // Debug pannel 

    // Create debug pannel 
    if (this.isDebugMode) { 
     this.gContainer.innerHTML += "<div id=\"gDebug" + gContainerID + "\" class=\"gDebug\">cometishian</div>"; 
     this.gDebugPannel = document.getElementById("gDebug" + gContainerID); 
    } 

    gDebug("lmfao!"); 

// Updates debug information 
function gDebug(debugMessage) { 
    alert(this.gDebugPannel.innerHTML); 
    if (this.isDebugMode) { this.gDebugPannel.innerHTML = debugMessage; } 
} 
} 

Je pense à alerter « cometishian » mais this.gDebugPannel.innerHTML est nulle, des idées?

Lors d'une étude plus approfondie, ce fichier .DebugPannel est indéfini.

Mise à jour:

// Gantt chart object 
function ganttChart(gContainerID) { 

    this.isDebugMode = true;         // Is this chart in debug mode 
    this.gContainer = document.getElementById(gContainerID); // The container the chart is built inside 
    this.gDebugPannel;           // Debug pannel 
    this.gPosX; 
    this.gPosY; 

    // Create debug pannel 
    if (this.isDebugMode) { 
     this.gContainer.innerHTML += "<div id=\"gDebug" + gContainerID + "\" class=\"gDebug\">5,5 | 5.1</div>"; 
     this.gDebugPannel = document.getElementById("gDebug" + gContainerID); 
    } 

    // Updates debug information 
    ganttChart.gDebug = function(debugMessage) { 
     if (this.isDebugMode) { this.gDebugPannel.innerHTML = debugMessage; } 
    } 

    this.gDebug("wo"); 

} 

la ligne this.gDebug ("wo") lance:

détails de l'erreur de page Web

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5. 30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3) Horodatage: jeu, 25 nov 2010 12:57:51 UTC

Message: Object doesn't support this property or method 
Line: 21 
Char: 5 
Code: 0 
URI: http://server1/bb/ganttnew/gMain.js 
+0

L'instruction 'this.gDebugPannel;' ne fait rien. – SLaks

+0

panneau a 1 'n' btw ... – brad

Répondre

1

Vous devez appeler la fonction de la présente instance, comme this:

gDebug.call(this, "Hi!"); 

La bonne façon de faire est de mettre la fonction dans le prototype de la classe: (Cela devrait être fait après déclarant la fonction constructeur)

ganttChart.prototype.gDebug = function(debugMessage) { 
    alert(this.gDebugPannel.innerHTML); 
    if (this.isDebugMode) { this.gDebugPannel.innerHTML = debugMessage; } 
} 

this.gDebug("Hi!"); 
+0

Génial merci, pourquoi cela fonctionne-t-il lorsque vous passez deux paramètres mais quand la fonction est définie comme acceptant 1? –

+0

@Tom: La méthode 'call' prend le contexte (' this'), suivi des paramètres à passer à la fonction. https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/Function/call – SLaks

+0

Merci! Je l'ai prototypé comme vous le dites (je veux le faire correctement) mais je reçois une erreur, pourriez-vous regarder le code mis à jour si ce n'est pas trop un problème pour vous –

1

vous pouvez aussi le faire comme

this.gDebug= function(debugMessage) { 
    alert(this.gDebugPannel.innerHTML); 
    if (this.isDebugMode) { this.gDebugPannel.innerHTML = debugMessage; } 
}