2012-06-10 5 views
8

可能性の重複:これは前に
How to “properly” create a custom object in JavaScript?Javascriptでカスタムオブジェクトを作成するには?

申し訳ありませんが回答されている場合、私はJavaScriptでカスタムオブジェクトを作成する点であることを申し出た選択肢の量に圧倒ビットです。私は彼らのそれぞれの強みや弱み、あるいは彼らが全く違うかどうかはわかりません。

1:新しいオブジェクト

person = new Object() 
person.name = "Tim Scarfe" 
person.height = "6Ft" 

person.run = function() { 
    this.state = "running" 
    this.speed = "4ms^-1" 
} 

2:

ここで私は、オブジェクトを構築することが分かってきたさまざまな方法のいくつかであるリテラル表記は

timObject = { 
    property1 : "Hello", 
    property2 : "MmmMMm", 
    property3 : ["mmm", 2, 3, 6, "kkk"], 
    method1 : function(){alert("Method had been called" + this.property1)} 
}; 

3 :機能

function AdBox() { 
    this.width = 200; 
    this.height = 60; 
    this.text = 'default ad text'; 
    this.prototype.move = function() { 
     // code for move method goes here 
    } 
} 
this.prototype.display = function() { 
    // code 
} 

私はさらにいくつかの方法を見ましたが、あまり一般的ではありませんでした。わかるように、誰かがフィールドとメソッドを持つ単純なオブジェクトを必要としているとき、標準が何であるか正確にはわかりません。

読んでいただきありがとうございます。

+1

あなたの 'AdBox'関数では' this.prototype.move = function'ではなく 'this.move = function'でなければなりません。 – zzzzBov

+0

@zzzzBov:うん、ちょっとコピーして[ここ](http://javascript.about.com/library/bltut35.htm)から貼り付けました。彼らはそれがどちらの方法でもできると言いましたが、違いがあります。 –

+2

http://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript#1598077 – zerkms

答えて

1

第1と第2のオプションは機能的に同じです。ほとんどの開発者は、少し短くなっているので、リテラル表記を使用することを選択します。

第3のオプションは、通常、再利用可能なオブジェクト(継承など)を作成する場合にのみ使用されます。この場合、関数はコンストラクタのプロトタイプで定義されたメソッドとプロパティを継承できる新しいオブジェクトインスタンスを返す関数である "コンストラクタ"として機能します。

+0

'new'キーワードを使わないことを「良い習慣」と言います。私はそのアドバイスに同意しなければならないだろう。 –

+0

あなたは間違ったリンクです。私は正しいリンクを見つけた後でこれを更新します(これは新しいオブジェクト(*)には使用されていませんでした)。私の元の(削除された)コメントでそれを誤解して申し訳ありません)。 –