在私有函数内调用此(公共)函数

时间:2012-12-18 19:34:19

标签: javascript

我有以下javascript:(JSFiddle

$(function () {
    function Cat()
    {  
        this.Meow = function (sound) {
            alert("Meow: " + sound);
        }

        this.Kick = function () {
            MakeNoise();    
        }

        var MakeNoise = function () {
            Meow("noise");
            //Cat.Meow("noise");
            //self.Meow("noise");
            //this.Meow("noise");                      
        }        
    }

    var c = new Cat();
    c.Kick();
});​

当我调用Kick函数时,我收到错误“Meow is not defined”(我在MakeNoise函数中尝试过的四件事中的任何一件)。

我也尝试了原型设计,但这给了我同样的错误:

Cat.prototype.Meow = function (sound) {
    return this.Meow(sound);    
}

我确信这有一个非常直截了当的解决方案,但我无法弄清楚如何成功调用“Cat”类的Meow函数。我怎么能这样做?

顺便说一句,这个架构是否有意义?我的目的是将KickMeow作为公共函数,将MakeNoise作为私有函数。

1 个答案:

答案 0 :(得分:4)

保存参考对象,以便在MakeNoise函数中使用它。

$(function () {
    function Cat()
    {  
        var self = this;
        this.Meow = function (sound) {
            alert("Meow: " + sound);
        }

        this.Kick = function () {
            MakeNoise();    
        }

        var MakeNoise = function () {
            //Meow("noise");
            //Cat.Meow("noise");
            self.Meow("noise");
            //this.Meow("noise");                      
        }        
    }

    var c = new Cat();
    c.Kick();
});​

http://jsfiddle.net/mowglisanu/7XEYD/3/