JavaScript-Objectsを1つの記事で紹介
オブジェクトの作成
オブジェクトダイレクトボリューム
オブジェクト直尺は、コロンとカンマで区切られた複数の名前と値の組からなるマッピングテーブルで、マッピングテーブル全体は括弧で囲まれている。
var empty = {};
var point = { x:0, y:0};
var point2 = {x:point.x, y:point.y+1};
var book = {
"main title":"JavaScript",
//property names with spaces in them must be represented as strings
"sub-title":"The",
//property names with hyphens must be represented as strings
"for":"all",
//"for" is a reserved word and must be represented as a string
author:{
//the value of this property is an object
name:"123"
//Note that the attribute names are not quoted in
}
};
newによるオブジェクトの作成
var o = new Object();
// create an empty object, same as {}
var a = new Array();
//create an empty array, same as []
var d = new Date();
//create a Date object that represents the current time
var r = new RegExp("js");
//create a RegExp object that can do matching
プロトタイプ
オブジェクトダイレクトメトリクスで作成されたオブジェクトはすべて同じプロトタイプオブジェクトを持ち、プロトタイプオブジェクトへの参照はJavaScriptのコードObject.prototypeで取得することができます。キーワード new とコンストラクタの呼び出しで作成されたオブジェクトのプロトタイプは、コンストラクタの prototype プロパティの値です。したがって、{}で生成されたオブジェクトと同様に、new Object() で生成されたオブジェクトも Object.prototype を継承しています。.
プロトタイプを持たないオブジェクトは少なく、Object.prototypeはその一つです。また、プロパティも継承しません。他のすべてのプロトタイプオブジェクトは通常のオブジェクトであり、通常のオブジェクトはプロトタイプを持ちます。すべての組み込みコンストラクタ(およびほとんどのカスタム コンストラクタ)は、Object.prototype を継承したプロトタイプを持っています。たとえば、Date.prototype のプロパティは Object.prototype を継承しているので、new Date() で作成された Date オブジェクトのプロパティは Date.prototype と Object.prototype の両方を継承しています。このようにリンクされた一連のプロトタイプオブジェクトは、いわゆるプロトタイプチェーンと呼ばれるものです。
Object.create()
object.create()は、オブジェクトのプロパティをさらに記述するためのオプションの第2引数を提供します。
Object.create()は静的関数であり、オブジェクトに対して呼び出されるように提供されるメソッドではありません。これを使用するには、目的のプロトタイプオブジェクトを渡すだけでよいのです。
var AB = Object.create({x:1,y:2});
プロパティの照会と設定
var a = book.author;
//Get the "author" property of book
book.edition = 6;
//create a property named "edition" for book and assign it a value
book["main title"] = "123"
//assign a value to the "main title" property
継承
xがoに存在しない場合、oのプロトタイプオブジェクトにxのプロパティを問い合わせます。xがプロトタイプオブジェクトにも存在しない場合、このプロトタイプオブジェクトにもプロトタイプがあり、このプロトタイプオブジェクトのプロトタイプにxを見つけるまで、またはヌルプロトタイプのオブジェクトを見つけるまで問い合わせが続けられるのです。
var o = {}
o.x = 1;//define an attribute x for o
var p = inherit(o);//p inherits o
p.y = 2;//define an attribute y for p
var q = inherit(p);//q inherits p
q.z = 3;//define an attribute z for q
q.x + q.y // 3 x and y are inherited from o and p respectively
属性の割り当て操作は、まずプロトタイプチェーンをチェックし、割り当て操作が許可されているかどうかを判断します。割り当てが許可されている場合、常に元のオブジェクトにプロパティを作成するか、既存のプロパティに値を割り当て、プロトタイプチェーンは変更されません。
var u = { r:1 };
var c = inherit(u);
c.x = 1; c.y =1;
c.r = 2;
u.r; // 1 Prototype object is not modified
属性アクセスエラー
bookにa属性がない場合
book.a // undefined
var l = book.a.length;
// throws a type error exception, undefined has no properties
属性の削除
delete 演算子は、オブジェクトのプロパティを削除します。
delete book.author;
//book no longer has the attribute author
delete book["main title"];
//book no longer has the property "main title"
delete 演算子は自身のプロパティのみを削除でき、継承されたプロパティは削除できません(継承されたプロパティを削除するには、それを定義しているプロトタイプオブジェクトから削除する必要があり、これはそのプロトタイプを継承するすべてのオブジェクトに影響します)。
delete 式は、削除に成功した場合、または副作用(存在しないプロパティの削除など)がない場合に true を返します。また、delete の後にプロパティアクセス式が続かない場合にも true を返します。
o = {x:1};
delete o.x; //delete x, return true
delete o.x; //does nothing (x no longer exists), returns true
delete o.toString; //Does nothing (toString is inherited), return true
delete 1; //nothing, return true
delete は、設定可能性が false の属性を削除することはできません。
このような場合、delete 操作は false を返します。
delete Object.prototype;// cannot be deleted, the property is not configurable
var x = 1; //Declare a global variable
delete this.x; //can't delete this property
function f (){}/declare a global function
delete this.f; //can't delete the global function either
プロパティの検出
in演算子は、左辺に属性名(文字列)、右辺にオブジェクトを指定します。オブジェクトが自己または継承したプロパティにこの属性を含んでいればtrueを返します。
var o = { x:1 }
"x" in o; //true "x" is an attribute of o
"y" in o; //false "y" is not an attribute of o
"toString" in o; //true o inherits the toString property
オブジェクトの hasOwnProperty() メソッドは、与えられた名前がオブジェクト自身のプロパティであるかどうかをチェックするために使用されます。継承されたプロパティの場合は、false を返します。
var o = { x:1 }
o.hasOwnProperty("x");//true o has an own property x
o.hasOwnProperty("y");//false o has no property y in it
o.hasOwnProperty("toString");//false toString is an inherited property
propertyIsEnumerable() は hasOwnProperty() の拡張バージョンで、所有するプロパティを検出し、そのプロパティの enumerable 属性が true の場合にのみ true を返します。
var o = inherit({ y:2});
o.x = 1;
o.propertyIsEnumerable("x"); //true o has an enumerable own property x
o.propertyIsEnumerable("y"); //false y is inherited
Object.propertyIsEnumerable("toString"); //false not enumerable
in演算子を使う以外に、あるプロパティが列挙可能かどうかを簡単に判断する方法として、"! =="を使って、属性が未定義かどうかを判断することもできます。
var o = { x:1 }
o.x ! == undefined; //true o has attribute x
o.y ! == undefined; //false there is no attribute y in o
o.toString ! == undefined; //true o inherits the toString property
オブジェクトをシリアライズする
オブジェクトのシリアライズとは、オブジェクトの状態を文字列に変換したり、文字列をオブジェクトに還元することです。ecmascript 5では、JavaScriptオブジェクトをシリアライズおよび還元するための組み込み関数JSON.stringify() および JSON.parse() が提供されます。これらのメソッドは、データ交換フォーマットとして JSON を使用します。
o = {x:1, y:{z:[false,null,""]}};
s = JSON.stringify(o);
//s is '{"x":1,"y":{"z":[false,null,""]}}'
p = JSON.parse(s);
// p == o
概要
この記事は以上です。あなたのお役に立てれば幸いです。また、Script Houseの他のコンテンツにももっと注目してください
関連
-
jsp request.getParameter()とrequest.getAttribute()メソッドの違いについて解説しています。
-
JSPの9つの組み込みオブジェクトを徹底解説
-
JSP技術を使って簡単なオンラインテストシステムを実装する例 詳細へ
-
jsp学習用スクリプトレットの使用方法について解説
-
JSPデータ連動プロセス解析
-
jspインターフェースに画像を挿入する方法
-
JSP中国語文字化けコード問題解決法詳細
-
Javawebプロジェクト実行エラーHTTPステータス404の解決策
-
jsp+servletによるファイルアップロード機能の簡易実装(saveディレクトリの改良)
-
サーブレット+jspでログインできないようにフィルタを実装する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン