Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var user = {
name: 'Имя пользователя',
address: {
city: 'Город',
street: 'Улица',
house: 'Дом'
}
};
var sergei = { name: "Сергей" }'
sergei.__proto__ = user;
state = transition(state, arg1, arg2, arg3,...);Видимо, зависит от того, как применять. Я далек от функционального программирования. Расскажите, а когда такая надобность возникает?
Я к тому, что иногда создание ссылки на прототип может быть «дешевле», чем копирование всех полей по честному.
var a = { name: "Sergei", age: 29 };
var extend = function(obj, attrs) {
var result = new Object();
for(i in attrs) {
result[i] = attrs[i];
}
result.__proto__ = obj;
return result;
}
b = extend(a, {city: "Pushkino"});
Вместо __proto__ следует использовать Object.create
В javascript не получится сделать жесткой иммутабельности. Все равно будет возможность что-то поменять. Так что это вопрос конвенции.Насчёт конвенции вы очень верно подметили. В JS очень много вещей отданы на откуп конвенции. Но всё-таки жёсткую иммутабельность для plain-object можно сделать путём глубокого клонирования. Тем не менее, это выходит дороговато, поэтому соглашения тут выигрывают.
// строку
var result = new Object();
// заменяем на
var result = Object.create(obj);
// строку
// result.__proto__ = obj;
// убираем
А __proto__ это internal свойство, поэтому его использование некорректно.
Мы узнали что такое линзы, для чего они нужны и как ими пользоваться.
var state = {
moduleA: stateA,
moduleB: stateB,
};
function foo(state) {
state = state+1;
someDiv.textContent = state;
return state;
}
function foo(state) {
var count = state.moduleA + 1;
someDiv.textContent = count;
return updateState(state, { moduleA: count });
}
function updateState(oldstate, newstate) {
for (var k in oldstate)
if (!(k in newstate))
upd[k] = oldstate[k];
return newstate;
}
function foo(state, lens) {
var count = lens.get(state)+1;
someDiv.textContent = count;
return lens.set(state, count);
}
Функциональный Javascript. Пишем свои линзы, часть 1