関数オブジェクトのプロパティ : JavaScript

Pocket

関数オブジェクト[1]のプロパティはコンストラクタプロパティ、インスタンスプロパティ、(インスタンス)prototypeプロパティがある。

  • コンストラクタプロパティ
    コンストラクタ自身に定義したプロパティ。関数オブジェクトはデフォルトのとしてlength, prototypeを持つ。
  • (インスタンス)prototypeプロパティ
    prototypeに設定したプロパティ。prototypeは関数オブジェクトを拡張する。
  • インスタンスプロパティ
    thisキーワードで宣言するプロパティ。
function Foo(value) {
    this.name = value;
    // インスタンスメソッド
    // インスタンスごとにメモリを確保する。メモリの面はprototypeメソッドが効率的。
    this._getName = function() {
        console.log(this.name);
    }
}
Foo.getLength = function() {
    console.log(Foo.length); // lengthはFooコンストラクタプロパティ   
};
Foo.getProto = function() {
    console.log(Foo.prototype); // prototypeはコンストラクタプロパティ
};
// prototypeメソッド
Foo.prototype.protoGetName = function() {
    console.log(this.name);
};

// コンストラクタメンバ
Foo.getLength();         // 1
Foo.getProto();          // Foo.prototype
// インスタンスメンバ
var foo = new Foo('foo');
foo.getName();            // foo
foo.protoGetName();           // foo

Arrayのコンストラクタプロパティ、prototype(インスタンス)プロパティ、インスタンスプロパティの例。

コンストラクタプロパティ prototypeプロパティ インスタンスプロパティ
prototype
length(値は1)
constructor, concat, joinなど 0以上の整数値(値は配列の要素)
lentgh(値は配列の要素数)

コンストラクタプロパティのlengthはコンストラクタの引数の数。Arrayは1つ。

function Foo(x , y, z) {
}
console.log(Foo.length); // 3

[1] この記事の関数オブジェクトはコンストラクタ関数を想定している。

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。