オブジェクト指向プログラミング---パートI(オブジェクトを理解します)

はじめ
のECMAScriptはクラスという概念がないので、そのオブジェクトとクラスベース言語のオブジェクトが異なっています。
ECMA-262は、オブジェクトのように定義されている置く:「ベース値、オブジェクトまたは機能を含むことができる属性の順不同のセット、」このことから、我々はECMAScriptのハッシュテーブルと考えることができますので:
値のデータや機能することができ、名前と値のペアのセット、より多くの何も、
各オブジェクトが参照型に基づいて作成されていない、参照型は、第5章で議論することができますネイティブ型は、型が開発者によって定義されてもよい

-appreciated標的
-attributeタイプ
ECMA-262は、時間のみの指定された特性を有するだけ内側から様々な特徴を定義する、属性が記載されています。ECMA-262には、JavaScript従って、これらの特性のJavaScriptエンジンを達成するために使用される定義
それらを直接アクセスすることはできません。内部特性値を表示するには、角括弧でそれらを置くために子供たちのこの仕様2組は、例えば:[[列挙]]
1.データは、属性
データは、位置値を含むデータを属性。あなたは、読んで、この位置に書き込むことができます。4つのデータ属性は、行動特性を記述があり
、属性はプロパティを再定義するために渡すことができます削除するには、プロパティの特性を変更する機能を削除、またはプロパティがプロパティにアクセスするように変更することができます。・[[CONFIGURABLE]]。
オブジェクトで定義された直接の属性、それらのプロパティをtrueに、このデフォルト値
・[[列挙]]:用-で旅行者を通じて戻して再利用するかどうかを示します。デフォルトtrue
・[書き込み可能]:プロパティかどうかを示す値を修正します。trueにデフォルトは
・[[値]]:この属性は、データ値が含まれています。この位置からの読み取り時に属性を読んで、属性値が書き込まれたときに、新しい値がこの場所に保存されています。デフォルトが定義されていない

2.アクセスプロパティは、
データ値が含まれていないプロパティアクセサ;それらはゲッターとセッター関数のペアを含む(ただし、これら二つの機能は必要ありません)。
・[[CONFIGURABLE]]:属性は、プロパティを再定義するために、プロパティの特性を変更する機能を渡すことができ、またはプロパティがプロパティにアクセスするように変更することができ、削除するには、[削除。
オブジェクトで定義された直接の属性、それらのプロパティをtrueに、このデフォルト値
・[[列挙]]:用-で旅行者を通じて戻して再利用するかどうかを示します。trueにデフォルト
・[[取得]]:プロパティを読み込むときに呼び出される関数。デフォルト値が定義されていない
・[[設定]]:プロパティを書くときに呼び出される関数。デフォルト値が定義されていない


のECMAScriptと直接データ属性またはプロパティのアクセサプロパティを定義していない。・経験を。
個人的な経験に基づいて:
あなたは直接のプロパティまたは設定の特性、そのアクセサプロパティを指定するために取得した場合。いずれかのデータ属性の特性を指定した場合、そのデータの属性。
あなたがfalseに設定可能なセットをしなかった場合は、データ属性とアクセスプロパティを交換することができ
<SCRIPT>
 のvar人= {名: "レオ" }; 

// 定義するアクセスプロパティ 
Object.defineProperty(人、 "スタイル" 、{ 
    設定可能:falseに
    GET:機能(){
         リターン "スタイル:" + この.nameの; 
    }、
    SET:関数(値){
         この .nameの= 値; 
    } 

}); 
にconsole.log(person.style); // トリガプロパティのgetメソッドアクセサ//出力スタイル:レオ 
person.style =「MyStyleは「; //は、SETは、アクセス方式のプロパティ//出力スタイルをトリガー:MyStyleは
にconsole.log(person.style); 

//データ属性変更 
Object.defineProperty(人、「スタイル」、{ 
    :値「」   // アクセス属性と設定を定義:偽、即ち、それらはデータの属性として定義され、強制的に定義された、自然に与えることができないプロパティは
} );

 </ SCRIPT>

 

<!DOCTYPE HTML> 
<HTML LANG = "EN"> 
<HEAD> 
    <METAのcharset = "UTF-8"> 
    <META NAME = "ビューポート" 
          コンテンツ =「幅=幅デバイス、ユーザースケーラブル= NO、initial-スケール= 1.0、最大規模= 1.0、最小スケール= 1.0 "> 
    <META HTTP-当量=" X - UA互換"コンテンツ=" IE =エッジ「> 
    <タイトル>ドキュメント</ TITLE> 
</ HEAD> 
<身体> 
<SCRIPT> // オブジェクトの複数の属性を定義する可能性が非常に大きいため。ECMAScript5もObject.defineProperties()メソッドを定義しました。// 今回、我々はデータアクセスの属性とメソッドをどの属性でのvarブック= {}; 
    Object.defineProperties(書籍、{ 
        __year:



    
    2004年
        }、
        版:{ 
            書き込み可能:
            値: 1 
        }、
        年:{ 
            取得:関数(){
                 返す この.__年。
            }、
            セット:関数(newValueに){
                 場合(newValueに> 2004 ){
                     この ._year = newValueに。
                    この .edition + = newValueに- 2004 ; 
                } 
            } 
 
        }
    })
    // ECMAScript5 Object.getOwnPropertyDescriptor()メソッドは、指定された属性記述子のために達成することができます使用
    するvar(、書籍「__今年記述子= Object.getOwnPropertyDescriptor ); 
    はconsole.log(記述子);   // {値:2004、書き込み可能: trueに、可算:、偽設定可能に:} falseに 
    はconsole.log(Object.getOwnPropertyDescriptor(ウィンドウ、 '今年'));   // {GET:ƒ、SET:ƒ、可算:、偽設定可能に:falseに} 
    // 覚えておいてください: ECMAScriptの中で、あなたがオブジェクトのDOMオブジェクトとBOMを含め、任意のオブジェクトに対してObject.getOwnPropertyDescriptor()メソッドを使用することができる 
。</ SCRIPT> 
</ BODY> 
</ HTML>

 

おすすめ

転載: www.cnblogs.com/cl94/p/11257661.html