Как я могу спасти неопределенное свойство объекта в JavaScript?
Хорошо, скажем, у вас есть два объекта: greg
а также stacy
, Они оба люди. Объект Грега выглядит так:
var greg = {
name: "Greg",
job: "doctor",
age: 45
}
и Стейси вот так:
var stacy = {
name: "Stacy",
age: 42
}
Когда кто-то пытается получить доступ к Стейси job
собственность, как я могу получить это возвращение "Безработный", не называя это job
? Мне бы хотелось решение, которое не использует прототипы, и я бы предпочел не использовать функцию для доступа ко всем свойствам объекта.
Просто для контекста: я использую это для системы автоматической загрузки Ajax, аналогичной серверной стороне Rails.
4 ответа
Использование ||
указать значение по умолчанию при извлечении свойства.
var job = person.job || "Unemployed";
Тем не менее, это должно быть сделано в любом месте, где вы получаете работу. Если вы не хотите повторять это повсеместно, вам нужно использовать функцию или прототип.
Я бы использовал такой код... используя конструктор со значениями по умолчанию:
function Person(cfg) {
this.name = cfg.name || "John Q. Public";
this.job = cfg.job || "Unemployed";
// EDIT: This will allow for an age of '0' -- a newborn.
this.age = typeof cfg.age === undefined ? null : cfg.age;
}
var greg = new Person({
name: "Greg",
job: "doctor",
age: 45
});
var stacy = new Person({
name: "Stacy",
age: 42
});
console.log(stacy.job);
Вы можете использовать явные проверки с typeof:
if (typeof obj.job === "undefined") { ..
или проще:
console.log(obj.job || "Unemployed")
Неправильная архитектура!
function Person(name, job, age) {
this.name = name ? name : "no name";
this.job = job ? job : "no job";
this.age = age ? age : -1:
}
var greg = new Person("Greg", "doctor", 45);
var stacy = new Person("Stacy", null, 42);
console.log(stacy.job);
Или вы планировали написать собственный статический класс для каждого человека???