質問

私はJavaScriptのオブジェクト指向プログラミングに比較的初心者であり、JavaScriptでオブジェクトを定義および使用する「最良の」方法がわかりません。以下に示すように、オブジェクトを定義し、新しいインスタンスをインスタンスする「標準的な」方法を見てきました。

function myObjectType(property1, propterty2) {
    this.property1 = property1,
    this.property2 = property2
}
// now create a new instance
var myNewvariable = new myObjectType('value for property1', 'value for property2');

しかし、私はこの方法でオブジェクトの新しいインスタンスを作成する他の方法を見てきました:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
});

私はその2番目の方法がどのように表示されるかが好きです - コードは自己文書化されています。しかし、私の質問は次のとおりです。

  1. 「より良い」方法はどれですか?

  2. その2番目の方法を使用して、オブジェクトタイプをその暗黙のコンストラクターで定義する「クラシック」方法を使用して定義されたオブジェクトタイプの変数をインスタンス化できますか?

  3. これらのオブジェクトの配列を作成したい場合、他に考慮事項はありますか?

前もって感謝します。

役に立ちましたか?

解決

それは本当に味がしています。こちらです:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
});

... 2/3以上の引数がある場合は、一般に、読みやすさを助け、オプションの引数の問題を回避することが容易になるため、より良い方が優れています(fn(null,null,null,123')).

別の考慮事項はパフォーマンスです。従来の方法で議論を渡すことはより速くなりますが、この速度ゲインは非常にパフォーマンスに敏感な状況でのみ重要になります。

その2番目の方法を使用して、オブジェクトタイプをその暗黙のコンストラクターで定義する「クラシック」方法を使用して定義されたオブジェクトタイプの変数をインスタンス化できますか?

簡単ではありません。引数を渡すだけでなくハッシュを使用してコンストラクターをインスタンス化したい場合、ソースを制御できない場合は、「ラップ」することができます。

var _constructor = SomeConstructorFunction;

SomeConstructorFunction = function(hash) {
    return new _constructor(hash.property1, hash.property2);
};

しかし、スタイルのためだけにサードパーティのAPIをいじることは本当にお勧めしません。

これらのオブジェクトの配列を作成したい場合、他に考慮事項はありますか?

配列の大きさはどれくらいですか?正確に何の配列は何ですか?パフォーマンスは検討する価値があるかもしれません...

他のヒント

JavaScriptオブジェクトを作成する最良の方法は、新しいものを使用して終了することです(少なくともCrockford Campを購読する場合)

myObjectType = function(props) {
  // anything defined on props will be private due to the closure

  props.privateVar = "private";

  // anything defined on obj will be public
  obj = {};

  obj.testing = new function() {
    alert(props.privateVar);
  };

  return obj;
};
instance = myObjectType({prop1: "prop"});

// if we want inheritance, it just means starting with the base type instead of
// a new object
subType = function(props) {
  obj = myObjectType(props);
  obj.subTypeProperty = "hello.";

  return obj;
};

52ページ JavaScript:良い部分, 、私はそれを強くお勧めします:-)

1)とにかく私にとっては、方法#2がはるかに好まれていると思います。 2つのプロパティを備えた例はそれほど違いはありませんが、これをやりたいとしたらどうでしょう。

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
    //Leaving several properties out, don't want them populated
    property8:    "This is the value for property 8"
    property9:    "This is the value for property 9"

});  

過負荷の組み合わせの数を考えてください(または追跡する nulls)最初の方法でオブジェクトに供給したくない場合としない場合があるプロパティを処理する必要があります。これは 多くの より拡張可能で柔軟なアプローチ。

2)空白のコンストラクターでそれを許可するだけで、これはインスタンスのためにはるかにきれいになります。

3)特にいくつかのオブジェクトを使用して、長さ/読みやすさ。 JSONを見てください、それはかなりきれい/読みやすいです、少なくとも私にとっても、あなたがそのスタイルが好きなら、あなたのオブジェクトの配列を作成する 非常に 方法#2で同様です。

さて、2番目の方法は見栄えがよく、多くのセットアップオプションがある「クラス」の場合に役立ちます。ただし、実際にプロセスで別のオブジェクトを構築していることに注意してください。

JavaScriptフレームワークからいくつかのコードを読んで、あなたにアピールするスタイルを見つけることをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top