2011-06-22 92 views
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 
}) 

如何創建貓對象使用這種方法?

回答

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); 

} 
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({}); 

這種方法是有它的實際用途。