1

私は JS のより細かい点を理解しようとしており、オブジェクト リテラルがコンストラクターに渡される多くの例を見ています。このアプローチの利点は何ですか?また、このアプローチを使用するためにオブジェクトを作成するにはどうすればよいですか?

例えば:

myTooltip = new YAHOO.widget.Tooltip("myTooltip", { 
    context: "myContextEl", 
    text: "You have hovered over myContextEl.",
    showDelay: 500
});

単純なクラスを作成しているとします。多くの単純な OO チュートリアルは、次のようなものを提案しています

myCat = new Cat();
myCat.name = "fluffy";
myCat.friendly = true;
myCat.lives = 9

とは対照的に

myCat = new Cat({
    name: "fluffy", 
    friendly:true,
lives: 9
})

このアプローチを使用するために Cat オブジェクトを作成するにはどうすればよいですか?

4

2 に答える 2

7
function Cat(params) {
 this.name = params['name'];
 this.friendly = !!params['friendly'];
  //etc
}

var tom = new Cat({'name' : 'tom', 'friendly' : 'true'});

利点は、名前付きパラメーターを取得できることです(多数のパラメーターを受け取った場合、順序を覚えておく必要はありません)。

私にとっても読みやすいです

new Cat({'name' : 'tom', 'friendly' : 'true', 'lives' : 9});

よりも

new Cat('tom',true,9);

さらに、たとえばunderscore.jsを使用するなど、デフォルトを提供する方が簡単です。

function Cat(params) {

  var defaults = {'friendly' : true, 'lives' : 9};

  params = _.extend(params, defaults);

}
于 2011-06-22T22:19:17.463 に答える
0

YUI を使用した最初の例では、オブジェクト リテラルは単にオプションの辞書として使用されています。名前付きパラメーターがなく、関数が多くの引数を取る言語で役立ちます。また、JavaScript でこのようにデフォルトを操作する方が簡単です。

次の例を見てください。

function myf(options) {
  var url = options['url'] || 'http://...';
  var method = options['method'] || 'get';
  // ...
}

// Now you can pass only what you deem necessary in the function
myf({ 'url' : 'http://stackoverflow.com' });
myf({ 'method' : 'post' });
myf({});

このメソッドは、実用的な目的のために存在します。

于 2011-06-22T22:25:48.687 に答える