【问题标题】:Best way to create javascript classes with object literals and defaults使用对象字面量和默认值创建 javascript 类的最佳方法
【发布时间】:2010-09-08 07:04:55
【问题描述】:

创建 javascript 类的最佳方法是什么,以便可以通过传入对象字面量来创建对象,同时保持类中设置的默认值。

var brett = new Person({
    name: 'Brett'
    ,age: 21
    //gender: 'male' //The default is female, so brett.gender will be female
});

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    可能通过像这样定义你的构造函数:

    function Person(props) {
        this.name = props.name;
        this.age = props.age;
        this.gender = props.gender || 'female';
    }
    

    ...尽管如果您想传递虚假的性别(例如''、0、false、null 或 undefined),仍将使用默认值。如果这是一个问题,您可以执行以下操作:

    function Person(props) {
        // expected properties
        this.name = props.name;
        this.age = props.age;
    
        // optional properties
        var defaults = {
            gender: 'female'
            // etc
        };
        for (var k in defaults) {
            this[k] = props.hasOwnProperty(k) ? props[k] : defaults[k];
        }
    }
    

    【讨论】:

      【解决方案2】:

      你也可以使用 jQuery 的$.extend()

      【讨论】:

      • 谢谢!我不知道这存在。无论如何我都在使用 jquery,所以这将非常有用。
      【解决方案3】:

      你可以做一个浅克隆:

      function shallow_clone(target, source) {
          for (var i in source) {
              if (typeof target[i] == "undefined") {
                  target[i] = source[i];
              }
           }
      };
      

      然后:

      function Person(opts) {
          var defaults = { gender: 'male' }; 
      
          shallow_clone(this, opts);
          shallow_clone(this, defaults);
          ....
      };
      

      如果您需要更深的选项副本,您可以创建 deep_clone()(显然更复杂)。

      【讨论】:

        猜你喜欢
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 2020-02-26
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多