Какой принцип работы встроенного метода в прототипе? Имеется встроенный метод 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; } Как работает каждая?
Метод hash принимает строку и разбивает ее на массив с помощью метода split('.')Затем происходит итерация по каждому элементу массива с помощью метода reduce, начиная с объекта this (который является объектом, для которого вызван метод hash)На каждой итерации происходит проверка на существование свойства объекта с именем, указанным в текущем элементе массиваЕсли свойство существует, текущий объект обновляется на это свойствоВ конце выполнения метод возвращает конечный объект
Вторая реализация работает следующим образом:
Метод hash принимает строку и разбивает ее на массив с помощью метода split('.')Затем происходит итерация по каждому элементу массива с помощью метода forEachНа каждой итерации текущий объект обновляется на свойство текущего объекта с именем, указанным в текущем элементе массиваВ случае возникновения ошибки (если свойство не существует), текущий объект обновляется на undefinedВ конце выполнения метод возвращает конечный объект
Обе реализации выполняют одно и то же действие - проходят по уровням вложенных свойств объекта в соответствии с указанной строкой и возвращают конечный объект. Однако первая реализация использует метод reduce для итерации, в то время как вторая реализация использует метод forEach.
Первая реализация работает следующим образом:
Метод hash принимает строку и разбивает ее на массив с помощью метода split('.')Затем происходит итерация по каждому элементу массива с помощью метода reduce, начиная с объекта this (который является объектом, для которого вызван метод hash)На каждой итерации происходит проверка на существование свойства объекта с именем, указанным в текущем элементе массиваЕсли свойство существует, текущий объект обновляется на это свойствоВ конце выполнения метод возвращает конечный объектВторая реализация работает следующим образом:
Метод hash принимает строку и разбивает ее на массив с помощью метода split('.')Затем происходит итерация по каждому элементу массива с помощью метода forEachНа каждой итерации текущий объект обновляется на свойство текущего объекта с именем, указанным в текущем элементе массиваВ случае возникновения ошибки (если свойство не существует), текущий объект обновляется на undefinedВ конце выполнения метод возвращает конечный объектОбе реализации выполняют одно и то же действие - проходят по уровням вложенных свойств объекта в соответствии с указанной строкой и возвращают конечный объект. Однако первая реализация использует метод reduce для итерации, в то время как вторая реализация использует метод forEach.