JavaScript/Object

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動
JavaScript > Objectオブジェクト
JavaScript > Objectオブジェクト

Objectオブジェクト[編集]

Object型は、StringやNumber等の他のオブジェクトの下敷きとして用意されている JavaScriptでは他のオブジェクトは、基本的にすべてのデータはObject型を継承している。

メソッド[編集]

toString()[編集]

データを文字列化する。 データをどの様に文字列化するかは、そのオブジェクトごとに違うがObject型のtoStringがそのまま実行される場合にはそのデータのデータ型が何であるかを文字列で返す。

toLocaleString()[編集]

基本的にtoStringと全く同じ動作を行う。 このメソッドは、ArrayやNumber、Date型のオブジェクトがtoLocaleStringを持っているのに対し、他のオブジェクトはこれを持っていないため、他の型でtoLocaleStringが呼び出される場合でもエラー出してプログラムの実行が止まらないための下敷きとして用意されている。 他のデータ型でtoLocaleStringを使うべき問題にあたった場合にそれぞれのデータ型でメソッドを定義してやればよい。

hasOwnProperty(V)[編集]

オブジェクトが引数で渡したプロパティを自前で持っているかをチェックする。持っていない場合、および他のクラスから継承している場合はfalseを返す。

for~in文は通常、オブジェクトにプロパティやメソッドを追加したときにその違いが出る。 例えば次の様なオブジェクトを作成したとする。

Object.prototype.getBMI = function(){ return this["体重"] / Math.pow(this["身長"],2); }
var girl ={
  "身長":158,
  "体重":49
};
for( var i in girl )
  document.write( i, ' : ', girl[i], '<br />' ); 

この様にすると結果として、「身長」、「体重」の他に「getBMI」のメソッドの中身も表示されてしまう。 それを禁止するために、親オブジェクトから取得したデータを無視するため次の様に記述する。

for( var i in girl )
  if( girl.hasOwnProperty(i) )
    document.write( i, ' : ', girl[i], '<br />' ); 

ちなみに、親オブジェクトも含めてそのプロパティを持っているかどうかを調べるにはin演算子を使用する。

if ( i in girl ) { /* ... */ }

valueOf()[編集]

データの値をそのまま返す。 このメソッドは他のオブジェクトでそれぞれオーバーライドされるのを期待されて存在している。 そのため、単体としてそれほどの意味は無い。

isPrototypeOf(V)[編集]

引数で与えたオブジェクトが、自分の子孫ノードであるかどうかをチェックする。

function Foo(){}
function Bar(){}
function Baz(){}
Bar.prototype = new Foo();
Baz.prototype = new Bar();
document.write( Foo.prototype.isPrototypeOf(new Bar()) );  // true
document.write( Foo.prototype.isPrototypeOf(new Baz()) );  // true 

propertyIsEnumerable(V)[編集]

引数で指定したプロパティがfor~in文で列挙可能なものであるのかをチェックする。 列挙可能ならtrueを、不可能ならfalseを返す。