javascript中的类方法不是函数

时间:2013-04-17 15:01:50

标签: javascript object

答案必须明显,但我没有看到它

这是我的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 个答案:

答案 0 :(得分:15)

isComponentAvailable没有附加到您的对象(即不是它的属性),它只是被您的函数包围;这使它变得私密。

您可以在前面添加this以使其成为pulbic

this.isComponentAvailable = function() {

答案 1 :(得分:2)

isComponentAvailable是一个私人功能。您需要将其公开,方法是将其添加到this,如下所示:

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

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

答案 2 :(得分:2)

另一种看待它的方法是:

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

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

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

答案 3 :(得分:2)

isComponentAvailable实际附加到窗口对象。