は、addMethodは、すべての基本的な
オブジェクトに対して利用可能になる
オブジェクト型などの文字列、数値などのこのStringオブジェクトが関数である(ただし、文字列によって作成されたオブジェクトではないためであります)。 JavaScriptの型システムの
例えば、与えられた
var s = '';
あなた行うことができます
String.addMethod(...);
なく
s.addMethod(...);
簡単な説明がここに来る:
JavaScriptはありませんないクラスの通常の概念を持っています。その代わりに、新しいキーワードが呼び出されたときにその前に新しいキーワードを挿入することによって、関数をコンストラクタに変換することによって、いくらか同じことを達成できます。
例えば:あなたは
var myObj = new MyFunction(10);
のようにそれを呼び出す場合
function MyFunction(x) { this.myX = x; }
与えられ、それはこのmyobjと呼ばれるオブジェクトを作成します。このオブジェクトはmyXという単一のメンバ変数を持ちます。
(ボーナスの質問:上記の関数をnewキーワードなしで呼び出すとどうなりますか?つまり、var x = MyFunction(10)
ですが、おそらくその答えはおそらく次のようになります。
組み込みオブジェクトはまったく同じもので、文字列オブジェクトは関数Stringによって作成され、数値は関数によって作成されます番号など
これらの組み込みオブジェクトが関数によって作成されるのと同様に、それらの関数もそれぞれ「関数」関数(yikes!)によって作成されます。
プロトタイプを作成します。上記の例では
、あなたはどこか
MyFunction.prototype.someNewMethod = function() {}
を書く場合MyFunctionのコンストラクタ/関数によって作成されたすべてのオブジェクトはsomeNewMethodと呼ばれる余分なメンバ関数を持っているように見えます。プロトタイプを置き換えるか、プロトタイプのプロトタイプを置き換えるなど、プロトタイプを使って他の多くのファンキーなことをすることができますが、私はそれを熟知していません。
いいえ、それは愚かなJavaScriptのプロトタイプ継承の実装です。奇妙な関数をコンストラクタとして使用することで、プロトタイプの潜在的な利点は得られませんが、ほとんどのプログラマが理解できるクラスベースの継承とはまったく違っています。 JavaScriptのプロトタイプが何をしているのかを正確に理解することはうれしいですが、なぜそのモデルが理にかなっているかを明白にしているエピファニーは期待できません。それはしないので。 – bobince