JavaScriptオブジェクト向けの3つの特徴

2405 ワード

概要


もともとデザインモードを書くつもりだったのですが、jsのデザインモードについて話す前にjsのオブジェクト向けについてお話ししますが、多くのデザインモードの実現にはオブジェクト向けの思想が混ざっているので、まず前期の敷き詰めをしておきます.
jsは動的タイプのスクリプト型言語であり、変数タイプが保証されないことを知っているので、もともとこの方法を持つように設計されているかどうかを考慮することなく、任意のオブジェクトを呼び出す任意の方法を試してみることができます.
対象とは何か本稿では論じない.次に,jsにおけるオブジェクト向けの3つの特徴の実現について述べる.

パッヶージ

                   。           ,          
  • データパッケージ
  • Javaのような静的タイプの言語では、自身の構文がこれらの機能を提供しています.jsでは変数の役割ドメインのみでパッケージの特性を実現でき,publicとprivateの2つの特性しかシミュレートできない.
    /**
     -                     。
     - @type {{getName, setName}}
      */
    
      var obj=(function () {
    var _name="gcy";
    return {
        getName:function () {
            return _name;
        },
        setName:function (val) {
            _name=val;
        }
    
    };
     })();
     obj._name;  //undefined
     obj.getName(); //gcy
  • パッケージ実装は、オブジェクト内部の変化が外部に対して透明であり、見えないことである.このアプローチにより、オブジェクト間の結合が低くなり、メンテナンスのアップグレードが容易になり、チームが協力して開発されます.$(selector).each(function(index,element)).例えば、このeach関数では、内部実装に関心を持つ必要はありません.提供された機能が正しい限りいいです.インタフェース呼び出し形式に注目します.

  • 継承


    javaなどの静的言語に継承されるキーワードは、es 6にもextendやclassがあるが、その本質はプロトタイプメカニズムに基づいている.
    /**
     *    es5    
     * @constructor
     */
    var A=function () {
    }
    A.prototype={name:"gcy"};
    
    var B=function () {
    };
    B.prototype=new A();
    
    var b=new B();
    console.log(b.name);
    /**
     * e6    demo
     */
    class People{
        constructor(name){
            this.name=name;
        }
        getName(){
            return this.name;
        }
    }
    
    class Black extends People{
        constructor(name){
            super(name);
        }
        speak(){
            return " i am black";
        }
    }
    var peo=new Black("gcy");
    
    console.log(peo.getName()+' says '+peo.speak());

    実は原型継承方式は書き方が多い.プロトタイプチェーンメカニズムを理解することが重要だと思います.肝心なのはprototypeと__を理解することです.proto__.

    マルチステート


    多態は実はやった内容を誰と分けるのか.Javaでは、インタフェース向けのプログラミングを向上させることができます.jsは動的言語なので、多態性自体があります.次の例では、1つの動物が鳴き声を実現できるかどうかは、makeSoundに依存し、あるタイプのオブジェクトには適用されません.
     /**
         *        
         * @param animal
         */
        var makeSound=function (animal) {
            animal.sound();
        }
        var Duck=function () {
        }
        var Dog=function () {
        }
        Duck.prototype.sound=function () {
            console.log("   ")
        }
        Dog.prototype.sound=function () {
            console.log("   ")
        }
        makeSound(new Duck());
        makeSound(new Dog());