気の向くままに辿るIT/ICT/IoT
JavaScript

JavaScript / プロパティ

ホーム前へ次へ
ECMAScriptベースのJavaScriptとは?

JavaScript / プロパティ

ECMA-262 Edition 5.1 / ECMAScriptベースのJavaScript文法

ECMAScript / ECMA-262 Edition 5.1ベースのJavaScript文法

プロトタイプベースのオブジェクト指向

オブジェクト指向 / オブジェクトと種類

プロパティ

 オブジェクトは、プロパティと値のセットの集合であり、全てのカラでないオブジェクトやカラでないオブジェクトから生成されたばかりのインスタンスにはプロパティがあり、生成されるインスタンスもオブジェクトであり、JavaScriptにおいては、関数をプロパティとして持つことが可能で、こうした関数をメソッド(関数・メソッド)と呼びます。

プロパティへのアクセス

 プロパティへのアクセスには、ドット記法、または、ブラケット記法を利用します。

ドット記法

オブジェクト . xxx 

インスタンス . xxx 

 インスタンス含むオブジェクトの末尾にドット"."に続けて保持するプロパティを指定します。

ブラケット記法

オブジェクト [ "xxx" ]

インスタンス [ "xxx" ]

 オブジェクトやインスタンスの角ブラケットでプロパティを括って指定します。

 変数名や文字列値は、シングルクォートまたは、ダブルクォートで括ります。

Globalオブジェクトのプロパティ

 尚、Globalオブジェクトの"Global"自体は、インスタンスを生成せず、関数としても利用できないことになっているのでGlobalオブジェクトのメソッドを含む各種プロパティの利用に当たってはドットやブラケットを使わずに直接使用します。

各種オブジェクトのプロパティ確認方法

 Object.getOwnPropertyNames(Object);

 Object.getOwnPropertyNames(Object.prototype);

 Object.getOwnPropertyNames(Array);

 Object.getOwnPropertyNames(Array.prototype);

 Object.getOwnPropertyNames(Boolean);

 Object.getOwnPropertyNames(Boolean.prototype);

 ...etc.

 Globalオブジェクト以外の各オブジェクトやGlobal、JSONオブジェクトMathオブジェクト以外の各オブジェクトに存在する prototypeオブジェクト(プロパティ)等に属するプロパティ名の一覧は、ObjectオブジェクトgetOwnPropertyNames() メソッドを使用することによって取得することが可能です。

prototypeオブジェクトとプロパティの追加

 function samp_Prop1(num){

    this.a=num+1;

    this.b=num+2;

 }

 samp_Prop1.prototype.addProp1=function(num){

    this.a=num*5 ;

    this.b=num*3 ;

    return this ;

 }

 var obj = new samp_Prop1(6) ;

 document.write( '[obj.a is] '+obj.a+"<br>" );

 document.write( '[obj.b is] '+obj.b+"<br>" );

 

// [obj.a is] 7

// [obj.b is] 8

 

 obj.addProp1(6) ;

 document.write( '[obj.a is] '+obj.a+"<br>" );

 document.write( '[obj.b is] '+obj.b+"<br>" );

 

// [obj.a is] 30

// [obj.b is] 18

 

 プロパティの追加については、オブジェクト自体に追加することもできなくはありませんが、そのオブジェクトからインスタンスを生成する場合には、インスタンスに継承するプロパティを持つ為にある prototype プロパティに追加します。

 そうすることでインスタンス化の際、当該オブジェクトのプロパティをインスタンスに継承することができます。

 つまり、 prototype プロパティは、当該オブジェクトのプロパティを共有する為にそれらプロパティを保持するオブジェクトです。

  例では、 samp_Prop1 という関数オブジェクトを作成、その prototype オブジェクトに addProp1 プロパティを追加、その値として無名関数を代入することで addProp1 プロパティをメソッドに設定し、samp_Prop1 のインスタンスである obj から直接プロパティ a 、 b 、addProp1 にアクセスしています。

  尚、JavaScriptでは、 prototype オブジェクトに動的にプロパティを追加・削除(、削除にはdelete演算子を使用)することも可能、追加時にも宣言などは必要なく、インスタンスから当該オブジェクトへの参照については、インスタンス生成前でも生成後でも動的に追加されたプロパティにアクセスでき、動的に削除されたプロパティにはアクセスできなくなりますが、他方、インスタンス内で継承したプロパティを更新してもその影響が遡って及ぶことはありません。

ECMAScriptベースのJavaScriptリファレンス

ECMAScript / ECMA-262 Edition 5.1 日本語訳

ECMAScript / ECMA-262 第 5.1 版 訳

ホーム前へ次へ