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

Dav*_*vid 1 javascript object-literal

我正在尝试理解JS的细节,并且看到很多对象文字的例子被传递给构造函数.这种方法有什么好处?如何创建我的对象来使用这种方法?

例如:

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

假设我正在创建一个简单的类.很多简单的OO教程都提供了类似的东西

myCat = new Cat();
myCat.name = "fluffy";
myCat.friendly = true;
myCat.lives = 9
Run Code Online (Sandbox Code Playgroud)

相反

myCat = new Cat({
    name: "fluffy", 
    friendly:true,
lives: 9
})
Run Code Online (Sandbox Code Playgroud)

如何创建Cat对象以使用此方法?

Pab*_*dez 7

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

var tom = new Cat({'name' : 'tom', 'friendly' : 'true'});
Run Code Online (Sandbox Code Playgroud)

好处是您获得了命名参数(如果您收到很多参数,则无需记住订单).

对我来说也更具可读性

new Cat({'name' : 'tom', 'friendly' : 'true', 'lives' : 9});
Run Code Online (Sandbox Code Playgroud)

new Cat('tom',true,9);
Run Code Online (Sandbox Code Playgroud)

此外,提供默认值更容易,例如使用underscore.js:

function Cat(params) {

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

  params = _.extend(params, defaults);

}
Run Code Online (Sandbox Code Playgroud)