2009-12-09 9 views
7

Javascriptの機能は、このようなオブジェクトのプロトタイプに宣言することができます。プロトタイプ関数とjavascriptの通常の関数との違いは何ですか?

<object name>.prototype.<variable name>=function(){ 
// 
// 
} 

どのようにこの宣言を次よりも違うのですか?

<object name>.<variable name>=function(){ 
// 
// 
} 

プロトタイプ関数とjavascriptの通常の関数との違いは何ですか?

+1

は答えることができる本当の問題にしてください再フレーズもあります。 – gahooa

+3

@gahooa:なぜこの質問に答えることができないと思いますか?非常に高いレベルかもしれませんが、依然として問題です。あなたはいつでもそれを編集してより明確にすることができます。文法上の間違いのために投票する必要はありません... – Josh

+0

http://stackoverflow.com/questions/186244/what-does-it-mean-that-javascript-is-a-prototype-based-language –

答えて

7

基本オブジェクトのプロトタイプで宣言された関数は、そのオブジェクト型のすべてのインスタンスによって継承されます。例えば

..

String.prototype.foo = function() { 
    return 'bar'; 
}; 

今、すべての文字列が使用可能な関数foo()を持っています。

'test'.foo(); // returns 'bar'

プロトタイプベースの継承here

+2

+1また、関数*オブジェクトのプロトタイプで宣言された*およびプロパティ*は、そのオブジェクトのすべてのインスタンスによって継承されます。*既にインスタンス化されているものでも* –

+0

はい、良い点です。最後の部分は非常に重要です。プロトタイプは、メンバーが「未定義」とみなされる前に最後のキャッチとして多少なりとも作用します。そのため、プロトタイプを変更すると既存のオブジェクトにも影響します。 – Matt

16

プロトタイプ関数の詳細を読む通常の機能は、「静的」機能でありながら、インスタンス機能です。クラスのプロトタイプで宣言された関数は、そのクラスのすべてのインスタンスで使用できます。

var MyClass = function(){ 
}; 
MyClass.staticFunction = function(){alert("static");}; 
MyClass.prototype.protoFunction = function(){alert("instance");}; 

MyClass.staticFunction(); //OK 
MyClass.protoFunction(); //not OK 

var myInstance = new MyClass(); 
myInstance.staticFunction(); //not OK 
myInstance.protoFunction(); //OK 
+2

+1これは私が見てきた最も簡潔な説明です。 –

0

マットとイゴールは、すでに十分なコードサンプルを提供している、しかし、あなたが読むことができる最高の記事(ショート正しいとポイントまで)の1は、ダグラス・クロックフォードによって、Prototypal Inheritanceです。

人気のライブラリ(DojoPrototype、など)を介して継承を容易にするためのさまざまな方法がたくさん

関連する問題