簡體   English   中英

在對象構造函數中使用對象文字符號的好處?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM