在对象构造函数中使用对象文字表示法的好处

Benefits of using object literal notation in an object constructor?

本文关键字:对象 表示 构造函数 文字      更新时间:2023-09-26

我正在努力理解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);

此外,提供默认值更容易,例如使用undercore.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({});

这种方法是出于实际目的。