2011-11-09 5 views
4

で文字列のプロトタイプを拡張することはできません私はは、私はここではJavaScript

Uncaught TypeError: Object function String() { [native code] } has no method 'testthing' 

以下のエラーを取得するこのページを開くと、私は理由を把握することはできませんコード

<script> 

String.prototype.testthing = function() { 
    return "working"; 
} 

alert(String.testthing()); 

</script> 

です。私は問題なしでArrayプロトタイプを拡張しました。

+2

まあ、 '文字列にプロトタイプを拡張する必要がStringコンストラクトのオフメソッドを呼び出したい場合は!== String.prototype'。 –

+2

ポイントまで(IMO)、 'Object.getPrototypeOf(String)!== String.prototype'。 – ephemient

答えて

18

正しく表示されたコードは、Stringプロトタイプを正しく拡張しています。しかし、String.testthingの関数でメソッドを呼び出そうとしていて、stringインスタンスではメソッドを呼び出そうとしていません。

alert("".testthing()); // "displays 'working' 

あなたが実際にあなたがFunction

Function.prototype.testthing = function() { 
    return "working"; 
} 
alert(String.testthing()); 
+0

なぜ、 'Function.prototype'に' String.testthing = ... 'を割り当てないのですか? – clockworkgeek

+0

@clockworkgeekはどちらも動作しますが(diff結果を生成します)。私はOPの意図が不明であったが、その方法の1つを実証したかった。 – JaredPar

+0

@ JaredParそれはString.prototype.customMethodのようなことをするのは悪い習慣だと考えていますか?もしそうなら、なぜですか? – FNMT8L9IN82