- PVSM.RU - https://www.pvsm.ru -
SteelToe — небольшая javascript библиотека, призванная решить проблему доступа к неопределенным свойствам объекта. Это особенно важно при обращении ко вложенным свойствам. В библиотеке также реализована возможность автовивификации, что порядком упрощает создание нужных свойств. В общем — довольно полезный сахар в OOP.
var object = { info: { name: { first: 'Jonathan', last: 'Clem' } } }
steelToe(object)('info')('name')('last')(); // 'Clem'
steelToe(object)('info')('features')('hairColor')(); // undefined
var object = { info: { name: { first: 'Jonathan', last: 'Clem' } } }
steelToe(object).walk('info.name.last'); // 'Clem'
steelToe(object).walk('info.features.hairColor'); // undefined
var jonathan = { info: { name: { first: 'Jonathan', last: 'Clem' } } },
steelToe(jonathan).set('info.name.middle', 'Tyler');
steelToe(jonathan).set('info.favorites.movie', 'Harold & Maude');
jonathan.info.name.middle; // Tyler
jonathan.info.favorites.movie; // Harold & Maude
Представьте — у вас есть сложный Javascript объект, с большой вложенностью свойств, который вы, допустим, получили из JSON. И, к примеру, вам требуется сделать что-то типа такого:
var fatherFirstNames = [];
for (var i = 0; i < families.length; i ++) {
var first = families[i].father.info.name.first;
if (first) {
fatherFirstNames.push(first);
}
}
// TypeError: 'undefined' is not an object (evaluating 'family.father.info.name.first')
— Блииин!, скажете вы — тупой выстрел в ногу! У вас запросто может вывалиться ошибка TypeError
, т.к. ничто не гарантирует, что свойство father
определено, или у него есть требуемые вам свойства. Обычно, чтобы предупредить ошибки подобного рода, мы пишем убогости, типа этой
var farherFirstNames = [];
for (var i = 0; i < families.length; i++) {
var father = families[i].father;
if (father && father.info && father.info.name && father.info.name.first) {
fatherFirstNames.push(father.info.name.first);
}
}
Буэээ… Смотрите, как элегантно решает эту проблему SteelToe!
var fatherFirstNames = [];
for (var i = 0; i < families.length; i++) {
var name = steelToe(families[i]).walk('father.info.name.first');
if (name) {
fatherFirstNames.push(name);
}
}
fatherFirstNames; // ["Hank", "Dale", "Bill"]
Больше никаких TypeError
-ов! Счастье!
Библиотека представлена на сайте [1], и в github [2].
Автор: creage
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/20456
Ссылки в тексте:
[1] на сайте: http://jclem.net/steeltoe/
[2] github: https://github.com/jclem/steeltoe
[3] Источник: http://habrahabr.ru/post/159269/
Нажмите здесь для печати.