2011-06-22 8 views
1

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

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

は、私は単純なクラスを作成したとします。私はこのアプローチを使用するには、猫のオブジェクトを作成するにはどうすればよい

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

とは対照的に、多くのシンプルなOOチュートリアルは

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

ような何かを示唆しますか?

答えて

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

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

の利点はあなたが得ることにある名前付きパラメータ(あなたがそれらの多くを受け取った場合、あなたは順番を覚えておく必要はありません)。とあなたの最初の例では

function Cat(params) { 

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

    params = _.extend(params, defaults); 

} 
0

:私に

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

はまた、それは例えばunderscore.jsを使用してのように、デフォルト値を提供する方が簡単です

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

よりも読みやすいです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({}); 

それは実用的な目的だため、この方法があります。

関連する問題