Как эта функция взбирается по цепочке прототипов в JavaScript?
Это упражнение из курса, в котором есть функция создания имитации извлечения свойств из объектов, чтобы вы лучше поняли, что происходит.
DOT = function dotFunc(obj, prop){
// if this obj has this property just return it
if(obj.hasOwnProperty(prop)){
return obj[prop];
// otherwise keep waking up the proto chain
} else if (obj.__proto__){
return DOT(obj.__proto__, prop);
}
};
Моя проблема с остальным, если... Я принимаю это, чтобы сказать "Если этот объект имеет __proto__
свойство, вернуть функцию DOT снова, но на этот раз, используя obj.__proto__
в качестве первого значения. Это по сути дела obj.__proto__.__proto__.__proto__
рекурсивно, пока не найдет собственность?
1 ответ
Ну, как @georg просто ответил: "Ответ - да".
Если бы мне пришлось развить это, ваша рекурсивная функция на самом деле вернет два значения: либо значение свойства, либо undefined
,
Поскольку неявно, если свойство не находится в цепочке прототипов, то if
/else
не вернется, и функция не вернет ничего, что по умолчанию возвращает undefined
,
HTH ☺