ECMAScript / ECMA-262 Edition 5.1ベースのJavaScript文法
オブジェクトは、プロパティと値のセットの集合であり、全てのカラでないオブジェクトやカラでないオブジェクトから生成されたばかりのインスタンスにはプロパティがあり、生成されるインスタンスもオブジェクトであり、JavaScriptにおいては、関数をプロパティとして持つことが可能で、こうした関数をメソッド(関数・メソッド)と呼びます。
プロパティへのアクセスには、ドット記法、または、ブラケット記法を利用します。
オブジェクト . xxx
インスタンス . xxx
インスタンス含むオブジェクトの末尾にドット"."に続けて保持するプロパティを指定します。
オブジェクト [ "xxx" ]
インスタンス [ "xxx" ]
オブジェクトやインスタンスの角ブラケットでプロパティを括って指定します。
変数名や文字列値は、シングルクォートまたは、ダブルクォートで括ります。
尚、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() メソッドを使用することによって取得することが可能です。
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演算子を使用)することも可能、追加時にも宣言などは必要なく、インスタンスから当該オブジェクトへの参照については、インスタンス生成前でも生成後でも動的に追加されたプロパティにアクセスでき、動的に削除されたプロパティにはアクセスできなくなりますが、他方、インスタンス内で継承したプロパティを更新してもその影響が遡って及ぶことはありません。