オブジェクト指向プログラミング190120


何が対象に向かってプログラミングしますか?対象の思想を使ってコードを書いて、対象に向かってプログラミングします.
特徴:
  • 抽象:核心問題点をつかむ.
  • パッケージ:オブジェクトのみでアクセスできます.
  • 継承:既存のオブジェクトから新しいオブジェクトを継承します.
  • 多形:複数のオブジェクトの異なる形態属性.
  • オブジェクトの構成:
    属性:オブジェクトの下の変数を属性と呼びます.
    方法:オブジェクトの下の関数をメソッドといいます.
        var arr = [];
        arr.number = 20; //           。
        arr.text = function(){
            alert(123)
        
        } //           。
    オブジェクトを作成:
    var obj = new Object();    //        。
    obj.name = '  !';        //   
    obj.sayName = function(){
        alert(this.name); //this  obj
    }                           //  
    obj.sayName() //  !
    複数のオブジェクトを作成:
    var obj1 = new Object();
    obj1.name = '  '
    obj1.sayName = function(){
        alert(this.name);
    }
    
    
    var obj2 = new Objcet();
    obj2.name = '  !'
    obj2.sayName = function(){
        alert(this.name);
    }
    
    Objectコンストラクタやオブジェクトの字面の量はすべて単一のオブジェクトを作成するために使用できますが、これらの方法は明らかな欠点があります.同じインターフェースを使って多くのオブジェクトを作成すると、多くの重複コードが発生します.
    工場方式:
    オブジェクトに向かうパッケージ関数:
    function createPerson(name){
        var obj = new Object();
        obj.name = name;
        obj.sayName = function(){
            alert(this.name); //this  obj
        }
        return obj;
    }
    
    var P1 = createPerson('  !');
    P1.sayName();
    
    
    var P2 = createPerson('  !');
    P2.sayName();
    作成対象は工場方式で実現され、パラメータを伝達することができます.作成対象はすべてObjectの元の構造関数を使用して実現されますので、対象のタイプを識別することができません.
    コンストラクタモード:
    EcmaScriptの構造関数は、特定のタイプのオブジェクトを作成するために使用できます.ObjectやArayのようなオリジナルのコンストラクタは、動作時に自動的に実行環境に現れます.また、カスタムオブジェクトの種類と方法を定義するために、カスタムのコンストラクタを作成することもできます.
    function Person(name) {
        this.name = name;
        this.sayName = function(){
            alert(this.name);  //this  Person
        }
    }
    
    var p1 = new Person('  ');
    p1.sayName() //   
    
    var p2 = new Person('  ');
    p2.sayName() //  
    工場方式との違い:
    1.関数内でオブジェクトを作成していません.
    2.直接に属性方法を疲れたthisオブジェクトに与えます.
    3.return文がありません.
    Personの新しいインスタンスを作成するには、newオペレータを使用する必要があります.このようにコンストラクタを呼び出すと実際には4つのステップがあります.
  • 新しいオブジェクトを作成します.
  • は、構造関数のスコープを新しいオブジェクトに割り当てます.したがって、thisはこの新しいオブジェクトを指します.
  • は、コンストラクタ内のコード(このオブジェクトに属性を追加)を実行します.
  • は新しいオブジェクトを返します.
  • コンストラクタの問題:
             各方法は各例でもう一度作成します.前の例では、p 1とp 2はsayName()という方法がありますが、その2つの方法は同じFunctionの例ではありません.ECMAScriptの関数は対象ですので、関数を作成するごとに、すなわちオブジェクトを実例化しました.
    console.log(p1.sayName == p2.sayName) //false
    プロトタイプ:
             私たちが作成した各関数にはプロトタイプの属性があります.この属性はポインタでオブジェクトを指します.このオブジェクトの用途は特定のタイプのすべてのインスタンスで共有できる属性と方法を含んでいます.プロトタイプとは、構文関数を呼び出して作成したその対象例の原型オブジェクトのことを意味します.
    function Person = function(){
        
    }
    Person.prototype.name = '  ';
    Person.prototype.sayName = function(){
        alert(this.name); 
    }
    
    var p1 = new Person();
    p1.sayName() //   
    
    var p2 = new Person();
    p1.sayName() //   
    
    console.log(p1.sayName == p2.sayName) //true
    プロトタイプのオブジェクトを理解する:いつでも、新しい関数を作成すると、特定のルールのセットに従ってプロタイプ属性を作成します.この属性は関数のプロトタイプのオブジェクトを指します.デフォルトではすべてのプロトタイプオブジェクトが自動的にconstructor属性を取得します.この属性はプロトタイプ属性の所在関数を指すポインタです.