【JavaScriptハイレベルまとめ】対象に向けたプログラム設計-理解対象
3108 ワード
オブジェクトの属性タイプ
-----データのプロパティ
データ属性はデータ値の位置を含み、この位置で読み取りと書き込みができます.データ属性は4つの特性があります.[[Configrable]]:deleteで属性を削除し、属性を再定義できるかどうかを示す.属性の特性を変更できますか?またはアクセス属性に変更できますか?私たちが直接オブジェクトに属性を定義すると、このデータ属性がデフォルトの[Configrable]はtrue です.[[Enumerable]:for-iを通じて循環できますか? [[Writable]]:属性を変更できるかどうかを示す値. [[Value]]:この属性を含むデータ値は、属性の値をこの位置から読み出し、属性の値を書き込むのもこの位置に保存します. クラスは次のように対象の属性nameを定義します.[[Configrable]]、[[Enumerable]]]、[[Writable]は全部trueです.[[Value]]は定義の値です.[[小明]はこれに対して修正値がすべてこの位置に反映されます.
3つのパラメータを受け入れる:属性があるオブジェクト 属性名 は、オブジェクトを説明する.このオブジェクトの属性キーワードはConfigrable,Enumerable,Writable,Valueのうちの一つでなければなりません.
-----アクセス属性
アクセス属性にはデータ値が含まれていませんが、一対のgetterとsetter関数が含まれています.アクセス器のプロパティは以下の4つの特性があります. [[Configrable]]:deleteで属性を削除し、属性を再定義できるかどうかを示す.属性の特性を変更できますか?またはアクセス属性に変更できますか?私たちが直接オブジェクトに属性を定義すると、このデータ属性がデフォルトの[Configrable]はtrue です.[[Enumerable]:for-iを通じて循環できますか? [[Get]:属性の読み込み時に呼び出し、デフォルト値はundefinedとなります. [[Set]:属性を書き込む時に呼び出し、デフォルト値はundefinedとなります. Object.defineProperty()により属性のデフォルト特性を変更することができます.
-----データのプロパティ
データ属性はデータ値の位置を含み、この位置で読み取りと書き込みができます.データ属性は4つの特性があります.
var person = {
name: " "
};
Object.defineProperty()属性のデフォルト特性を変更できます.3つのパラメータを受け入れる:
var person = {};
Object.defineProperty(person, "name", {
writable: false,
value: "Nicholas"
});
alert(person.name); //"Nicholas"
person.name = "Greg"; // writable: false
alert(person.name); //"Nicholas"
注意:Object.definePropertyを使用するとConfigrableはfalseに設定されます.これはtrueに設定できません.Object.definePropertyを再起動します.writable以外の特性を修正するとエラーが発生します.-----アクセス属性
アクセス属性にはデータ値が含まれていませんが、一対のgetterとsetter関数が含まれています.アクセス器のプロパティは以下の4つの特性があります.
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;
alert(book.edition); //2
Object.defineProperties()複数の属性を定義する特性var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function(){
// ...
},
set: function(newValue){
// ...
}
}
})
Object.getOwn PropertyDescriptor()属性の特性を読み取るvar book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function(){
return this._year;
},
set: function(newValue){
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
alert(descriptor.value); //2004
alert(descriptor.configurable); //false
alert(typeof descriptor.get); //"undefined"
var descriptor = Object.getOwnPropertyDescriptor(book, "year");
alert(descriptor.value); //undefined
alert(descriptor.enumerable); //false
alert(typeof descriptor.get); //"function"