15

答えは明白なはずだが、私には見えない

ここに私の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;
        };
    };

それから私はインスタンス化します

var auth = new Authentification();

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

私は最後の方法以外のすべてに到達できます、それは firebug で言います:

auth.isComponentAvailable は関数ではありません..しかし、それは..

ありがとうございました

4

4 に答える 4

18

isComponentAvailableオブジェクトにアタッチされていません (つまり、オブジェクトのプロパティではありません)。関数によって囲まれているだけです。それはそれをプライベートにします。

接頭辞を付けthisて、パルビックにすることができます

this.isComponentAvailable = function() {

于 2013-04-17T15:03:50.770 に答える
4

isComponentAvailable は、実際には window オブジェクトにアタッチされています。

于 2013-04-17T15:27:25.140 に答える
2

isComponentAvailableプライベート関数です。this次のように追加して、公開する必要があります。

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

    this.isComponentAvailable = function() {
        ...
    };
};
于 2013-04-17T15:03:52.683 に答える
2

それを見る別の方法は次のとおりです。

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

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

var auth = new Authentification();
alert(auth.isComponentAvailable());
于 2013-04-17T15:10:59.457 に答える