「javaScript高級プログラム設計-第6章」を読んで対象を理解します.

3615 ワード

ECMA−262は、オブジェクトを、基本値、オブジェクト、または関数を含む無秩序属性のセットとして定義します.したがって、オブジェクトは名前ペアのセットであり、名前はオブジェクトの属性ごとの名前であり、名前は一つの値にマッピングされていることが分かります.
一、オブジェクトの作成
オブジェクトの作成には2つの方法があります.
方式1
var person=new Object();
person.name=“Jone”;
person.age=20;
person.job=“Software Engineer”;

person.sayName=function(){
    alert(this.name);
};
方式二
var person={
    name:”Jone”,
    age:20,
    job:“Software Engineer”,
    
    sayName:function(){
        alert(this.name);
    }
};
この2つの方法で作成したオブジェクトは同じです.フレキシブルに混合して使用することもできますが、var person=new Object()
var person={
    name:”Jone”,
    age:20,
    job:“Software Engineer”,
    
    sayName:function(){
        alert(this.name);
    }
}
すべてはpersonのための賦課であり、重複した賦課はできません.もし繰り返し使うなら、前の値の放棄に相当します.その後再賦課された値を使います.あるいは、personに新しい住所を指しています.住所には新しいオブジェクトが保存されています.personは、参照タイプであると判断したので、任意の場所において、属性とアクセス属性を追加してもよい.例えば、person.sex=“ ”.personはポイントで訪問する時は、personのためにアドレスを変更しません.変更したのは住所に保存されているオブジェクトです.
二、オブジェクト属性の特性
オブジェクトの属性は、2つの属性に分けることができます.データ属性、アクセス属性です.二つのタイプの属性はそれぞれの特性があります.
  • データ属性:
  • [[configurable]]:      delete    ,         ,               。
    [[enumerable]]:      for-in      。
    [[writable]]:          。
    [[value]]:          。        ,       ;        ,          。         undefined。
                       ,   configurable、enumerable、writable        true。
    
  • アクセス器のプロパティ:
  • [[configurable]]:      delete    ,         ,               。
    [[enumerable]]:      for-in      。
    [[get]]:           。    undefined
    [[set]]:           。    undefined
                       ,   configurable、enumerable        true。
    
    アクセス器属性の使用方法としては、属性の値を設定すると他の属性が変化します.アクセス器属性のgetsetの特性は直接定義できないが、Object.defineProperty()を使用して定義され、属性のgetsetの特性とwritablevalueの特性は同時に存在しない.
  • 特性のアクセス方法:
  • Object.defineProperty()例:
  • var book={};
    Object.defineProperty(book,”year”,{
        configurable:true,
        value:2004
    });
    Object.defineProperty(person,”_year”,{
        configurable:true,
        get:function(){
            return this.year;
        },
        set:function(newValue){
            if(newValue>2004){
                this.year=newValue;
            }
        }
    });
    
    新しい属性を作成するか、属性の特性を変更します.新しい属性を作成する場合、指定されていない場合、configurableenumerablewritableのデフォルト値は全部falseです.configurablefalseに設定されると、trueに戻すことができなくなり、Object.defineProperty()を呼び出してwritable以外の特性を修正するとエラーが発生します.
  • Object.defineProperties()は、複数の属性を一度に定義することができる.
  • var book={};
    Object.defineProperties(book,{
        year:{
            configurable:true,
            value:2004
        },
        _year:{
            configurable:true,
            get:function(){
                return this.year;
            },
            set:function(newValue){
                if(newValue>2004){
                    this.year=newValue;
                }
            }
        }
    });
    
  • Object.getOwn PropertyDescriptor()は、属性の特性を読み取るために使用される.二つのパラメータを受け付けます.属性があるオブジェクトと、その特性を読み取る属性名、戻り時にその特性のオブジェクトは例えば
  • です.
    var descriptor=Object.getOwnPropertyDescriptor(book,”year”);
                alert(descriptor.value);//2004
                alert(descriptor.configurable);//true
    
    この本の第6章の対象に向けたプログラミングを読みました.私は3つのノートを作りました.これは第一編で、後には二つの編があります.それぞれパッケージ類と継承です.以前は本当に問題を理解したと思っていましたが、それをはっきり説明できます.よく説明してから書きやすくなりました.今ははっきり書くのが本当に難しいです.一つ一つの言葉を吟味するのは無駄話ではなく、違った意味がないので、なるべく少ない字句を使うなどしています.長い間喋っていましたが、よく書けましたか?どこか問題があれば、指摘してください.