Лучший способ создать классы JavaScript с литералами объекта и значениями по умолчанию - PullRequest
0 голосов
/ 08 сентября 2010

Как лучше всего создавать классы javascript, чтобы объекты можно было создавать, передавая литералы объектов и в то же время поддерживая значения по умолчанию, установленные в классе.

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

Ответы [ 3 ]

3 голосов
/ 08 сентября 2010

Возможно, определив вашу функцию конструктора следующим образом:

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 голосов
/ 08 сентября 2010

Вы также можете использовать jQuery's $.extend()

1 голос
/ 08 сентября 2010

Вы можете сделать мелкий клон:

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 () (которыйболее сложный, очевидно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...