Какой принцип работы встроенного метода в прототипе? Имеется встроенный метод hash, прототипа Object, которая принимает строку, содержащую многоуровневый доступ вот пример:obj = {
person: {
name: 'joe',
history: {
hometown: 'bratislava',
bio: {
funFact: 'I like fishing.'
}
}
}
};
obj.hash('person.name'); // 'joe'
obj.hash('person.history.bio'); // { funFact: 'I like fishing.' }
obj.hash('person.history.homeStreet'); // undefined
obj.hash('person.animal.pet.needNoseAntEater'); // undefined
Вот две разные реализации hash, делают они одно и тоже:
1)Object.prototype.hash = function(string) {
return string.split('.').reduce(function(p,n) {
return p && p[n];
}, this);
};
2)Object.prototype.hash = function(string) {
var obj = this;
string.split(".").forEach(function(el) {
try {
obj = obj[el];
}
catch(e) {
obj = undefined;
}
});
return obj;
}
Как работает каждая?

21 Авг 2019 в 07:03
201 +1
0
Ответы
1

Первая реализация работает следующим образом:

Метод hash принимает строку и разбивает ее на массив с помощью метода split('.')Затем происходит итерация по каждому элементу массива с помощью метода reduce, начиная с объекта this (который является объектом, для которого вызван метод hash)На каждой итерации происходит проверка на существование свойства объекта с именем, указанным в текущем элементе массиваЕсли свойство существует, текущий объект обновляется на это свойствоВ конце выполнения метод возвращает конечный объект

Вторая реализация работает следующим образом:

Метод hash принимает строку и разбивает ее на массив с помощью метода split('.')Затем происходит итерация по каждому элементу массива с помощью метода forEachНа каждой итерации текущий объект обновляется на свойство текущего объекта с именем, указанным в текущем элементе массиваВ случае возникновения ошибки (если свойство не существует), текущий объект обновляется на undefinedВ конце выполнения метод возвращает конечный объект

Обе реализации выполняют одно и то же действие - проходят по уровням вложенных свойств объекта в соответствии с указанной строкой и возвращают конечный объект. Однако первая реализация использует метод reduce для итерации, в то время как вторая реализация использует метод forEach.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир