2009-07-02 13 views
9

私はこの質問に間違った言葉を書いたと確信していますが、それをうまく説明する方法はわかりません...JavaScriptのオブジェクトにパブリック関数を追加できますか?どうやって?

私は漠然とした考えを持っています。 JavaScript - 次のような意味です:

function Exclaimify(aString) 
{ 
    return aString + "!"; 
} 

var greeting = "Hello"; 
alert(greeting.Exclaimify()) // this shows "Hello!" in an alert box 

これは可能ですか?もしそうなら、どうすればいいですか?

+0

二迅速コメント:Stringプロトタイプを変更するための構文は次のようになります文字列のために(1)不要(本)、あなたはString.prototypeにしているので、「これは」Stringです知っています関数; (2)Object.prototypeまたはArray.prototypeに何も追加しないでください。もしあなたが "for(var item in array)"構文を使用することはできません。 –

+0

@John Kugelman:固定、ありがとう。 – MGOwen

+0

あなた自身の答えで質問を延長しないでください。別の回答が必要だと思われる場合は、下の自分の回答を投稿してください。 –

答えて

24

変数と同じように割り当てます。その後、thisを使用できます。簡単!

var obj = {foo: "bar"}; 

obj.someFunc = function() 
{ 
    return this.foo; 
} 

それはすごいですね。ええと、文字列ではなく、この凶悪犯の影響を受けない。しかし、オブジェクトの "クラス"を変更してそこにメソッドを追加する方法もあります。そして、「クラス」では、実際には「プロトタイプ」を意味します。 JavaScript doesn't have classes, it has prototypes

var greeting = "Hello"; 

String.prototype.Exclaimify = function() 
{ 
    return this + "!"; 
} 

alert(greeting.Exclaimify()) // this shows "Hello!" in an alert box 
+0

brilliant - まさに私が何をしていたのか。 – MGOwen

4

monkey patchingというテクニックを使用するように思えます。その記事にはDuck Punching JavaScript - Metaprogramming with Prototypeへのリンクが含まれています。

+0

ありがとうございます。あなたのリンクされた記事は、受け入れられた答えと同じくらい簡潔ではありませんでしたが、依然として見つかっています。 – MGOwen

+0

これは理論的に質問に答えるかもしれませんが、答えの本質的な部分をここに含め、参照のためのリンクを提供することが望ましいでしょう(http://meta.stackexchange.com/q/8259)。 –

関連する問題