Javascript: настройка свойств объекта - PullRequest
5 голосов
/ 04 ноября 2011

Я хочу иметь возможность сделать это:

var user1 = {
  name: 'John',
  gender: 'male'
}


var user2 = {
  name: 'James',
  gender: 'male',
  email: 'james@gmail.com'
}

user1.someSetMethod({email: 'john@gmail.com'});
user2.someSetMethod({name: 'Jenny', gender: 'female'});

Желаемый результат:

var user1 = {
  name: 'John',
  gender: 'male',
  email: 'john@gmail.com'
}


var user2 = {
  name: 'Jenny',
  gender: 'female',
  email: 'james@gmail.com'
}

Я хочу метод, которыйустановит атрибуты в соответствии с тем, что передается в функцию.Атрибут не существует, я хочу, чтобы он был создан, если он существует, я хочу, чтобы он был перезаписан.

Существует ли такой метод в Javascript?

Ответы [ 3 ]

6 голосов
/ 04 ноября 2011

Обычно это называется расширение вашего объекта.Практически каждая библиотека JavaScript имеет свой собственный метод для этого.Или вы можете написать свой собственный код в несколько строк кода.

Использование метода jQuery, вы бы сделали это так:

var user1 = {
  name: 'John',
  gender: 'male'
};

$.extend(user1, {
  email: 'john@gmail.com'
});

user1.email === 'john@gmail.com'; //true
3 голосов
/ 04 ноября 2011

Нет, вы не хотите этого делать.

Единственный способ добавить метод ко всем объектам - это расширить Object.prototype.

Это (в браузерах ES3, таких как IE8) приводит к добавлению свойств в перечисления.

Например:

Object.prototype.extend = function (o) {
  // clone properties of o into this
};

var someObj = {};
for (var key in someObj) {
  console.log(key); // "extend"
}

Лучшее, что вы можете сделать, это использовать Object.extend

Object.extend(user2, {
  name: "Jenny",
  gender: "female"
});

pd имеет реализацию extend или вы можете использовать:

Object.extend = function (target, source) {
  for (var key in source) {
    target[key] = source[key];
  }
};
2 голосов
/ 04 ноября 2011

Если вы хотите использовать jquery, вы можете использовать его метод extend, а также некоторые значения по умолчанию, которые обеспечат правильную установку всех требуемых свойств.

Примерно так:

function whatever(obj1) {
    var defaults = {
        name: 'Foo Bar',
        email: 'email@example.com',
        gender: 'male'
    };

    return $.extend(defaults, obj1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...