訪問のプロパティ:
図1に示すように、設定可能:プロパティの特性を変更することができる属性を再定義するために、または属性データの属性を変更できるかどうかを示す属性を削除することによって削除します。オブジェクトに直接定義された属性のために、デフォルトの属性が削除属性を削除するために使用することができる、真である削除指示定義利用Object.defineProperty方式のプロパティは、この特性のデフォルト値は偽で、プロパティを削除するために使用することができません。
例えば:
VAR OBJ = {}; Object.defineProperty(OBJ、 '名前' 、{ 値: 'リリ' }); obj.age = '23 ' ; 削除 obj.nameを; // 偽の戻り値は、厳密モード与えられ、プロパティが正常に削除されません。 削除 obj.age; //は、真の値を返し、属性が正常に削除することができます。
図2は、列挙のための:かどうかを示すことによって - ループ内のプロパティをバックアップ。オブジェクトに直接定義された属性は、属性が真であるデフォルトに使用することができること - ループのプロパティバック、属性を定義Object.defineProperty使用するために、指示falseにこのプロパティのデフォルト値は、のために使用されていません - 循環でプロパティを返します。
以下のための(一つでOBJ){ にconsole.log(ワン:+「」+ ; OBJ [ワン]) } // 結果はObject.defineProperty定義された名前の属性の使用の結果含まない // れる23:年齢
3.get:プロパティを読み込むときに呼び出される関数。デフォルト値はundefinedです。
4.set:プロパティを書くときに呼び出される関数。デフォルト値はundefinedです。
// 同様の双方向の結合以下、例えば、いつ、どのセットを使用してメソッドを取得するために、それはそれらを割り当て示しました。 VAR OBJ = { TEMP: '' 、 配列:[]、 プッシュ:関数(ヴァル){ この .TEMP = ヴァル; } }; Object.defineProperty(OBJ、 'TEMP' 、{ SET:関数(ヴァル){ OBJ。 Array.push(ヴァル); }、 GET:関数(){ 戻りobj.array; } }); obj.push( "プロ" ); obj.push( "愛" ); obj.push( "A"); Obj.pushは( "あなたは");
//結果
obj.array; //オブジェクトから直接取得
obj.temp; //メソッドを取りに行きます