Javascript Object詳細

2904 ワード

オブジェクトを作成
 •オブジェクト直接量

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
 オブジェクトとして使用することもできますし、関数として直接呼び出すこともできます.