javascriptジャンプ式前進(4)-対象基礎理論


前言
ECMAScriptの中で非常に重要だと思います.対象に対する理解は個人的にはまだ十分ではないです.だから、この文章はそれほど深くなくて、表層の知識を比較するだけです.
オブジェクト指向とは
対象に向かう定義は比較的に良い比喩で、例えば一人で、どんな特徴があって、これは特徴が対象の属性で、異なった人のまた同じところと自身のスポットライトです.このように単一の対象から継承、拡張に移行します.【注:ES 6以前は類がなかったという説がありますが、原生の継承もありません.シミュレーションが多いです.】
ECMAの定義は、「無秩序属性の幾何学的性質は、基本値、オブジェクトまたは関数を含むことができます.」
JSでは、声明の対象となる方法には、声明と文字の量があります.
    var x = {}; //   
    vay y = new Object(); //   

    x.name = "crper"  //     Object {name: "crper"}
しかし、ES 5から始まって、仕様と定義がますます豊富になりました.ES 5の新しいバージョンを追加したり、古いバージョンを改善したりします.
属性の種類
ECMAScriptには2つの属性があります.データ属性とアクセス属性です.
データ属性は4つの挙動特性があります.1.[Configrable]:trueに設定すれば、deleteで属性を削除できます.falseなら、いけません!!デフォルトはtrueです2.[[Enumerable]:for-innのようなサイクルは属性値を巡回することができますか?デフォルトはtrueです.3.[[Writable]:オブジェクトの属性値を変更することを許可するかどうか、デフォルトはtrueです.4.[[Value]:オブジェクトの属性値、デフォルトはundefinedです.
オブジェクトの挙動特性を修正するには、Object.definePropertyを用いて「定義対象属性としても理解できる」ことが必要であり、フォーマット:Object.defineProperty(obj,attribute,{ })はデモを参照する.
    var x = {};
    x.name = "crper";

   /*      ,  age      ;           ;   writable    ;       configurable    false   ,             ,   ;             ;          ,      Object.defineProperty     ,      ;      ,    Object.defineProperty,          ,   configurable[  ],enumerable[    ],writable[  ]    false; */
    Object.defineProperty(x,"age",{
        writable:false,
        configurable:false,
        value:23
    }) 
アクセス器の属性は4つの特性があります.1.[Configrable]:データの属性と一致します.2.[[Enumberbale]:データの属性とずっと;3.[[Get]:属性の読み込み時に関数を呼び出し、デフォルト値はundefinedとなります.4.[[Set]:属性値を書き込むときに関数を呼び出し、デフォルト値はundefinedとなります.
    /*getter  setter              ,       ; ES5     ,       getter,   !!!    <<JS          >> */
   var book = { 
        _year:2004,
        edition:1
    };

   Object.defineProperty(book,"year",{
      get:function(){
                return this._year;
     },
     set:function(newValue){
         if(newValue > 2004){
            this._year = newValue;
            this.edition += newValue - 2004;
         }
      }
  });

    book.year = 2005;
    console.log(book.edition);    // 2

   /*     ,getter      ,     ; setter         ,               ,                        */
複数の属性を定義
   /*       ,   defineProperty  ,                   */
   var my = {};
   Object.defineProperties(my,{
       name:{
            value:"crper"
       },
       age:{
          value:23
      },
      read:{
           get:function(){
                 return this.age;
           },
           set:function(value){
                if(value > 24){
                      return this.age  = (value - 24);
              }
          }
      }
   });
属性特性の読み込み
属性特性の読み取りには、Object,getOwnPropertyDescriptor(obj,attribute)方法が使用され得る.戻り値は、データ属性とアクセス属性の次の例である.
Object.getOwnPropertyDescriptor(my,"age") ;   //Object {value: 23, writable: false, enumerable: false, configurable: false}

Object.getOwnPropertyDescriptor(my,"name");  //Object {value: "crper", writable: false, enumerable: false, configurable: false}

Object.getOwnPropertyDescriptor(my,"read"); //Object {enumerable: false, configurable: false}
オブジェクトを作成
....     ...           
締め括りをつける
対象のいくつかの作成モードと継承の実現については、整理して、ついでにES 6の実現方法も織り込みます.吉音をお待ちしております.......