Javascript Object詳細
2904 ワード
オブジェクトを作成
•オブジェクト直接量
Javascriptオブジェクトは固有の属性と継承属性を持っています.
•オブジェクトoの属性xを検索する場合、まずoの属性xを検索します.もし見つけられなかったら、oのプロトタイプオブジェクトの中のx属性を探します.xまたはプロトタイプがnullのオブジェクトであることが分かるまで.
•オブジェクトoのx属性に値を付与する場合、oにすでに属性xがあるとxの値を変更し、oに属性xが存在しない場合、oにx属性を作成し、値を付与します.
•つまり、検索時にのみプロトタイプチェーンが機能します.
オブジェクトの属性
•オブジェクトのプロパティを巡回 オブジェクトの属性を巡回するために、for.inを使用できます.
for.inを使用すると、プロトタイプチェーンの属性を巡回します.巡回順序は広さを優先して巡回します.
したがって、hasOwnPropertyを使用すると、オブジェクトに固有の属性があるかどうかを判断できます.
•オブジェクトの属性の特性 Object.getOwn PropertyDescripter()を使ってオブジェクトの特定属性の記述子を取得します.
書き込み可能性(writable)は、オブジェクト属性が書き込み可能かどうかを示します.
例えば
例えば Arayのlengthなどの属性のenumerableはfalseであるため、
構成可能性(configrable)は、属性を変更できるかどうかの設定性とエニュメレーションを表します.
これらの構成属性はObject.definePropertiesで定義できます.Object.defineProperty(o,「foo」,{writable:false}
Getはオブジェクト属性の取得方法Setを表し、オブジェクト属性の設定方法を示します.
例
toStringは対象を文字列に変換し、デフォルトの変換は「object Object」などのものになりますので、json形式に変換するにはJSON.strigifyが使えます.
valueOfは対象を他のタイプに変換する必要があるときに使います.同じように、デフォルトの切り替えは何も言うべきことではない. 実行可能オブジェクト
以下の方法で実行可能なオブジェクトを作成できます.
•オブジェクト直接量
var o = {
foo : "bar"
}
•構造関数
var o = new Object();
•原型継承
var p = Object.create(o);
クラス引継ぎJavascriptオブジェクトは固有の属性と継承属性を持っています.
•オブジェクトoの属性xを検索する場合、まずoの属性xを検索します.もし見つけられなかったら、oのプロトタイプオブジェクトの中のx属性を探します.xまたはプロトタイプがnullのオブジェクトであることが分かるまで.
•オブジェクトoのx属性に値を付与する場合、oにすでに属性xがあるとxの値を変更し、oに属性xが存在しない場合、oにx属性を作成し、値を付与します.
•つまり、検索時にのみプロトタイプチェーンが機能します.
var O = {
x : 1
};
function P() {
this.y = 2;
}
P.prototype = O;
var t = new P();
console.log(t);
console.log('x' in t);//true
console.log(t.hasOwnProperty('x'));//false
オブジェクトに属性があるかどうかは、inまたはハスOwnPropertyを使用して判断することができます.オブジェクトの属性
•オブジェクトのプロパティを巡回 オブジェクトの属性を巡回するために、for.inを使用できます.
for.inを使用すると、プロトタイプチェーンの属性を巡回します.巡回順序は広さを優先して巡回します.
したがって、hasOwnPropertyを使用すると、オブジェクトに固有の属性があるかどうかを判断できます.
•オブジェクトの属性の特性 Object.getOwn PropertyDescripter()を使ってオブジェクトの特定属性の記述子を取得します.
書き込み可能性(writable)は、オブジェクト属性が書き込み可能かどうかを示します.
例えば
var o = {
foo : 'bar'
}
Object.defineProperty(o, "foo", { writable : false });
o.foo = 'world';
console.log(o.foo);// bar
エニュメレーションは、オブジェクト属性が列挙可能かどうかを表します.例えば Arayのlengthなどの属性のenumerableはfalseであるため、
for (p in Array) {
console.log(p);
}
何も出力しない構成可能性(configrable)は、属性を変更できるかどうかの設定性とエニュメレーションを表します.
これらの構成属性はObject.definePropertiesで定義できます.Object.defineProperty(o,「foo」,{writable:false}
Getはオブジェクト属性の取得方法Setを表し、オブジェクト属性の設定方法を示します.
例
var book = {
_year: 2004,
edition: 1
};
Object.defineProperty(book, "year", {
get: function () {
console.log('get year');
return this._year;
},
set: function (newValue) {
console.log('set year');
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005;// ‘set year'
console.log(book.year);// ‘get year' year
オブジェクト方法toStringは対象を文字列に変換し、デフォルトの変換は「object Object」などのものになりますので、json形式に変換するにはJSON.strigifyが使えます.
valueOfは対象を他のタイプに変換する必要があるときに使います.同じように、デフォルトの切り替えは何も言うべきことではない. 実行可能オブジェクト
以下の方法で実行可能なオブジェクトを作成できます.
function bar(o) {
var f = function() { return "Hello World!"; }
o.__proto__ = f.__proto__;
f.__proto__ = o;
return f;
}
var o = { x: 5 };
var foo = bar(o);
console.log(foo());
console.log(foo.x);
console.log(typeof foo);//function
オブジェクトとして使用することもできますし、関数として直接呼び出すこともできます.