2017-06-08 5 views
0

は、簡単なコードのこの次nsnippetを見てみてください -javsacript関数にプロパティをアタッチする - プロパティはどこにリンクされますか?

function Fis(){ 
} 

Fis.num =20;//no errors 
console.log(Fis.num);//prints 20 

は今、私はFIS機能は「Fis.prototype」リンクを介してオブジェクトにリンクされている(当初から)暗黙的であることを知っています。

Fis.num = 20のコードはエラーなしで実行されています。このnumプロパティはどこにリンクされていますか?

+0

関数はオブジェクトなので、オブジェクトのように動作します。 – RobG

答えて

0

Fis()機能は、実際にプロパティを割り当てることができるオブジェクトです。あなたの場合、20からFisの値を持つnumプロパティを定義します。したがって、このプロパティをFisに割り当てると、Fis.num=20にリンクされます。したがって、プロパティ値はFis.numで取得できます。 JavaScriptで

+0

...これはプロトタイプチェーンとは関係がありません。この関数はオブジェクトです。オブジェクトであるため、関数のプロパティを設定できます。 – Quentin

0

、すべての関数はオブジェクトである。それに加えて

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をご覧ください。

関連する問題