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