2013-04-17 19 views
7

Odpowiedź musi być oczywiste, ale nie widzę gometoda klasy w JavaScript nie jest funkcją

tutaj jest moja klasa javascript:

var Authentification = function() { 
     this.jeton = "", 
     this.componentAvailable = false, 
     Authentification.ACCESS_MASTER = "http://localhost:1923", 

     isComponentAvailable = function() { 
      var alea = 100000*(Math.random()); 

      $.ajax({ 
       url: Authentification.ACCESS_MASTER + "/testcomposant?" + alea, 
       type: "POST", 
       success: function(data) { 
        echo(data); 
       }, 
       error: function(message, status, errorThrown) { 
        alert(status); 
        alert(errorThrown); 
       } 
      }); 

      return true; 
     }; 
    }; 

potem instanciate

var auth = new Authentification(); 

alert(Authentification.ACCESS_MASTER);  
alert(auth.componentAvailable); 
alert(auth.isComponentAvailable()); 

mogę osiągnąć wszystko, ale ostatnia metoda, mówi w firebug:

auth.is ComponentAvailable nie jest funkcją .. ale ..

Dziękuję

Odpowiedz

11

isComponentAvailable nie jest podłączony do (czyli nie jest właściwością) swój przedmiot, jest on po prostu zamknięty przez funkcję; co czyni go prywatnym.

Można poprzedzić je this aby pulbic

this.isComponentAvailable = function() {

2

isComponentAvailable to prywatna funkcja. Musisz zrobić to publicznie przez dodanie go do this tak:

var Authentification = function() { 
    this.jeton = "", 
    this.componentAvailable = false, 
    Authentification.ACCESS_MASTER = "http://localhost:1923"; 

    this.isComponentAvailable = function() { 
     ... 
    }; 
}; 
2

Innym sposobem na to patrzeć to:

var Authentification = function() { 
    // class data 
    // ... 
}; 

Authentification.prototype = { // json object containing methods 
    isComponentAvailable: function(){ 
     // returns a value 
    } 
}; 

var auth = new Authentification(); 
alert(auth.isComponentAvailable()); 
2

isComponentAvailable jest właściwie przymocowany do obiektu window.

+4

To prawda, ale powinieneś opublikować jako komentarz, a nie odpowiedź –