jsはどうやってクラス(パッケージ)を作りますか?


他の対象言語を学んだことがあるJavaScrippterさんは、クラスを使ったことがあるかもしれません.例えば、クラス{}などの定義の一連の方法ですが、初心者がjsを勉強しているのを見て、JavaScriptは対象言語です.最初はずっとjsが対象に向かってプログラミングすることに悩んでいましたが、ここ数日はある程度知っています.js類に対する理解を話してください.
クラスとは、以下の機能があります.
  • コンストラクタ
  • 静的属性、静的方法
  • 共有属性、共有方法
  • プライベート属性、プライベート方法
  • この文章では、jsを使ってクラスのパッケージを実現し、上記の機能を実現する方法について説明します.
    1.簡単なクラス
    var Person = function(name, age){
        this.name = name;
        this.age = age;
    
        this.sayName = function(){
            console.log(this.name);
        };
    }
    どうですか?Taは類ではないと思いますか?それならこうしてもいいです.
    var Person = function(name, age){
        //    
        this.name = name;
        this.age = age;
        //    
        this.sayName = function(){
            console.log(this.name);
        };
    }
    へへへ…ここは狡猾な表情をしています.
    もしコンストラクタモードについてよく分からないなら、ここでjs作成対象のデザインモードを見てもいいです.
    2.複雑なクラス
    上の例があったら、私達はこの基礎の上で私達の改善を行うことができます.
    var Person = function(name, age){
        //    
        this.name = name;
        //    
        this.sayName = function(){
            console.log(this.name);
        };
        //      (        )
        var home = "China";
        //      (        )
        function sayHome(){
            console.log(home);
        }
        //   
        this.setAge = function(age){
            console.log(age + 12);
        };
        this.setAge(age);
    }
    //    (       )
    Person.sayAge = function(){
        console.log("your age is 12");
    }
    //    (       )
    Person.drink = "water";
    //      (         )
    Person.prototype.sayWord = function(){
        console.log("ys is a boy");
    }
    jsの中で上述のアナログの方法を利用して、種類の創建に対して実現して、この基礎の上で、私達は不安な現状、彼に対してカプセル化を行って、彼を1つの全体にならせて、更にjsのカプセル化性を体現することに利益があります.
    3.パッケージjs類
    ここではクローズドで実装し、まずクローズドの概念を説明します.クローズドコンセプト:一つの関数は、別の関数のスコープ内の変数にアクセスする権利があります.すなわち、一つの関数の内部に別の関数を作成します.
    以下のように実現します
    var Person = (function(){
        //        
        var home = "China";
        function sayHome(name){
            console.log(name + "'s home in " + home);
        }
        //    
        function _person(name, age){
            var _this = this;
            //        ,        new   
            if(_this instanceof _person){
                //    ,   
                _this.name = name;
                _this.getHome = function(){
                    //        ,  
                    sayHome(_this.name);
                };
                _this.test = sayHome; //    
                //   
                _this.setAge = function(age){
                    _this.age = age + 12;
                }(age);
            }else{
                return new _person(name, age);
            }
        }
        //        
        _person.prototype = {
            constructor: _person,
            drink: "water",
            sayWord: function(){
                console.log("ys is a boy");
            }
        }
        return _person;
    })();
    以下のように呼び出します
    var p1 = new Person("ys", 12);
    p1.getHome();                   //ys's home in China
    console.log(p1.age);            //24 
    
    var p2 = Person("ys", 12);
    p2.getHome();                   //ys's home in China
    console.log(p2.age);            //24 
    
    console.log(p2.test == p1.test);  //true,            
    上のコードのように、私達はjsでクラスを実現しました.
    まとめ:
  • いくつかの共通属性、方法は、静的に設定することができます.このように、実装のたびにメモリリソースを追加的に開く必要がなく、本当の意味での共有を達成することができます.
  • のいくつかの共通の属性方法は、内部プログラム処理時のみ共有に到達したい場合、静的プライベート属性方法、
  • に設定されている.
  • いくつかの共通の属性方法は、インスタンスオブジェクトで共有したい場合、プロトタイプ属性方法として設定され、