0

私は次の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 notdefined」というエラーが表示されます(MakeNoise関数で試した4つのことのいずれかで)。

私もそのようにプロトタイピングを試みましたが、それは私に同じエラーを与えました:

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

Meowこれには非常に簡単な解決策があると確信していますが、「Cat」クラスの関数を正常に呼び出す方法がわかりません。これどうやってするの?

余談ですが、このアーキテクチャはまったく意味がありますか?私の意図は、公的機能として、そして私的機能として持つことKickでしMeowMakeNoise

4

1 に答える 1

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/

于 2012-12-18T19:40:02.420 に答える