ほとんどの場合(主にチュートリアル)、私はメソッドに使用される "プロトタイプ"を見てきました。変数に "プロトタイプ"を使用する
私はそれが変数(おそらく "デフォルト値"を設定するのに便利です)にも使用できると確信しています。関数によく使われない理由はありますか?それは悪い習慣であるか、または顕著なパフォーマンスの違いはありますか?私の頭の上オフ
ほとんどの場合(主にチュートリアル)、私はメソッドに使用される "プロトタイプ"を見てきました。変数に "プロトタイプ"を使用する
私はそれが変数(おそらく "デフォルト値"を設定するのに便利です)にも使用できると確信しています。関数によく使われない理由はありますか?それは悪い習慣であるか、または顕著なパフォーマンスの違いはありますか?私の頭の上オフ
もうひとつ考えてみましょう:オブジェクトの属性をそのプロトタイプに保存したいのはなぜですか?
は、2つの答えがあります。技術的にはそれぞれのインスタンスに独自のメソッドがあるため、すべてのインスタンスでメソッドを定義すると膨大な量が消費されます。単純なデータ型の場合、コストがかなり低くなります。
gilly3 mentionedとして、あなたがしていることが絶対にわからない場合は、誤って2が発生することがあります。
ベストプラクティスは、(ああ、...私に起こりました)オブジェクト型)
。
[編集]
[/編集]
そして、はい、プロトタイプを使用した場合のパフォーマンス他の方法よりもslightly worseです。パフォーマンスの向上はほとんど目立たないものの、コードの可読性と保守性が大幅に損なわれる可能性があるため、このようなものを最適化しようとしないでください。
、あなたはあなたがあなたのオブジェクトにfor ... in
ループを行っている場合に役立ちますhasOwnProperty()
の機能を失います。
function MyObject() { ... }
MyObject.prototype.someProperty = 1;
var a = new MyObject();
var b = new MyObject();
b.someProperty = 2;
a.hasOwnProperty("someProperty"); // false
b.hasOwnProperty("someProperty"); // true
あなたの状況に関係なく、問題はありますか。
編集:もう1つの考え。あなたのプロトタイプでオブジェクトを格納し、そのオブジェクトのインスタンスは、そのオブジェクトのプロパティを変更した場合、それは他のすべてのインスタンスに影響します。
function MyObject() { ... }
MyObject.prototype.someProperty = { value: 1 };
var a = new MyObject();
var b = new MyObject();
b.someProperty.value = 2;
a.someProperty.value; // 2!! not 1
良い点。後者の場合、プロトタイプ変数に参照ではなく「単純な」データ型が含まれていることを確認しても問題はありません。 – IQAndreas
のJavaScriptのプロトタイプオブジェクトは、JavaScriptの1.1以降で導入し
function myObject()
{
this.constructor();
}
myObject.prototype =
{
constructor : function()
{
this.MyProperty1 = "123456"; //default property
this.MyProperty2 = "bla"; //default property
}
};
:、あなたはデフォルトのプロパティを追加することができます
オブジェクトのすべてのインスタンスにカスタムプロパティ/メソッドを追加するプロセスを簡素化するビルド済みのオブジェクトがあり、ここでは一例であり、
これが助けてくれたら教えてください...
(Javascriptフレームワークのように)プロトタイプフレームワークを参照していますか?あなたにこれを尋ねた別の質問がありますか?ちょっと興味があるんだけど。あなたは最終的に何をしようとしていますか? – MacGyver
@ mr-macgyver "prototype"という名前のビルトイン静的プロパティを参照しています。私はActionScriptに慣れていて、JavaScriptでクラスを「適切に」作成する方法を理解しようとしています。 – IQAndreas