Скажем, я получаю некоторый объект JSON с моего сервера, например. некоторые данные для объекта Person:
{firstName: "Bjarne", lastName: "Fisk"}
Теперь я хочу использовать некоторые методы поверх этих данных, например. для вычисления fullName:
fullName: function() { return this.firstName + " " + this.lastName; }
Чтобы я мог
var personData = {firstName: "Bjarne", lastName: "Fisk"};
var person = PROFIT(personData);
person.fullName(); // => "Bjarne Fisk"
Что я в принципе хотел бы сделать здесь, это добавить метод к прототипу объекта. Метод fullName()
является общим, поэтому его нельзя добавлять к самому объекту данных. Как..
personData.fullName = function() { return this.firstName + " " + this.lastName; }
... вызовет много избыточности; и, возможно, "загрязняют" объект данных.
Каков нынешний наилучший способ добавления таких методов к простому объекту данных?
EDIT:
Слегка от темы, но если проблема, описанная выше, может быть решена, можно было бы сделать несколько приятных псевдо- pattern matching
следующим образом:
if ( p = Person(data) ) {
console.log(p.fullName());
} else if ( d = Dog(data) ) {
console.log("I'm a dog lol. Hear me bark: "+d.bark());
} else {
throw new Exception("Shitty object");
}
Person
и Dog
будут добавлять методы, если объект data
имеет правильные атрибуты. Если нет, верните фальшивость (т.е. Данные не соответствуют/соответствуют).
ВОПРОС БОНУСА: Кто-нибудь знает библиотеку, которая либо использует, либо разрешает это (т.е. упрощает)? Это уже шаблон javascript? Если да, то что называется; и у вас есть ссылка, которая разрабатывается? Спасибо:)