、すべての関数はオブジェクトである。それに加えて
var fn = function() {};
fn.foo = 'bar'; // add property to object
for (var index in fn) {
// read properties from object
if (fn.hasOwnProperty(index)) {
console.log(fn[index]);
}
}
、すべての関数オブジェクトは、オブジェクト自体であるprototype
性質を有しています。関数を通常の方法で呼び出すと、このprototype
プロパティは無効になります。しかし、new
を使って関数を呼び出すと、JSは関数のprototype
プロパティをプロトタイプとする新しいオブジェクトを作成します。そして、それは、新しく作成されたオブジェクトと関数を呼び出して、それを返します。この場合、
var Func = function (baz) {
console.log(this.foo + baz); // "barabc"
}
Func.prototype.foo = "bar";
var object = new Func("abc");
、関数は、新しいオブジェクトをインスタンスと呼ばれ、クラスのコンストラクタをとも呼ばれますこのクラスの
プロトタイプチェーンの詳細はMDNをご覧ください。
関数はオブジェクトなので、オブジェクトのように動作します。 – RobG