2011-07-25 5 views
2

ほとんどの場合(主にチュートリアル)、私はメソッドに使用される "プロトタイプ"を見てきました。変数に "プロトタイプ"を使用する

私はそれが変数(おそらく "デフォルト値"を設定するのに便利です)にも使用できると確信しています。関数によく使われない理由はありますか?それは悪い習慣であるか、または顕著なパフォーマンスの違いはありますか?私の頭の上オフ

+0

(Javascriptフレームワークのように)プロトタイプフレームワークを参照していますか?あなたにこれを尋ねた別の質問がありますか?ちょっと興味があるんだけど。あなたは最終的に何をしようとしていますか? – MacGyver

+0

@ mr-macgyver "prototype"という名前のビルトイン静的プロパティを参照しています。私はActionScriptに慣れていて、JavaScriptでクラスを「適切に」作成する方法を理解しようとしています。 – IQAndreas

答えて

1

もうひとつ考えてみましょう:オブジェクトの属性をそのプロトタイプに保存したいのはなぜですか?

  1. 保存メモリ:

    は、2つの答えがあります。技術的にはそれぞれのインスタンスに独自のメソッドがあるため、すべてのインスタンスでメソッドを定義すると膨大な量が消費されます。単純なデータ型の場合、コストがかなり低くなります。

  2. 共有アクセス。インスタンスは、共通の属性へのアクセスを共有する必要があります。ただし、単純なデータ型では参照で格納されないため、これは不可能です。

gilly3 mentionedとして、あなたがしていることが絶対にわからない場合は、誤って2が発生することがあります。

  • 方法あなたが共有アクセスを必要としない限り、
  • 属性が 、インスタンスに行く(と属性があるプロトタイプに行く:

    ベストプラクティスは、(ああ、...私に起こりました)オブジェクト型)

[編集]

  • 共有アクセスではなく、 "クラス変数" クロージャを使用して実装する必要があります

[/編集]

そして、はい、プロトタイプを使用した場合のパフォーマンス他の方法よりもslightly worseです。パフォーマンスの向上はほとんど目立たないものの、コードの可読性と保守性が大幅に損なわれる可能性があるため、このようなものを最適化しようとしないでください。

2

、あなたはあなたがあなたのオブジェクトに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つの考え。あなたのプロトタイプでオブジェクトを格納し、そのオブジェクトのインスタンスは、そのオブジェクトのプロパティを変更した場合、それは他のすべてのインスタンスに影響します。

http://jsfiddle.net/BbmgP/

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 
+1

良い点。後者の場合、プロトタイプ変数に参照ではなく「単純な」データ型が含まれていることを確認しても問題はありません。 – IQAndreas

-1

のJavaScriptのプロトタイプオブジェクトは、JavaScriptの1.1以降で導入し

function myObject() 
{ 
    this.constructor(); 
} 

myObject.prototype = 
{ 

    constructor : function() 
    { 
     this.MyProperty1 = "123456"; //default property 
     this.MyProperty2 = "bla"; //default property 
    }  
}; 
:、あなたはデフォルトのプロパティを追加することができます

オブジェクトのすべてのインスタンスにカスタムプロパティ/メソッドを追加するプロセスを簡素化するビルド済みのオブジェクトがあり、ここでは一例であり、

これが助けてくれたら教えてください...

関連する問題