[英]Benefits of using object literal notation in an object constructor?
我試圖了解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對象以使用此方法?
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);
}
在第一個使用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({});
出於實際目的使用該方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.