Цепь прототипов (prototype chain) — это конечная цепь объектов, которая используется для организации наследования и разделяемых (shared) свойств.

Так как каждый объект имеет собственные свойства и ссылку на объект-прототип, в свою очередь прототип тоже имеет собственные свойства и ссылку на прототип, прототип прототипа тоже имеет собственные свойства и ссылку на прототип ну и так далее, пока ссылка на прототип не будет null — эта структура называется цепочка прототипов.

При попытке обратиться к свойству объекта (через точку или скобки) выполняется поиск указателя по имени: сперва проверяется есть ли указатель с таком-то именем с списке собственных свойств (если есть, то возвращается), если его нет, то идет поиск в собственном прототипе (если есть, то возвращается), если его нет, то идет поиск в прототипе прототипа и так далее, пока прототип прототипа не станет null в этом случае возвращается undefined.

Некоторые реализации JavaScript используют свойство proto для представления следующего объекта в цепочке прототипов.

Поиск свойства на чтение можно описать следующей функцией:

function getProperty(obj, prop) {
  if (obj.hasOwnProperty(prop)) return obj[prop]
  else if (obj.__proto__ !== null) return getProperty(obj.__proto__, prop)
  else return undefined
}

Назад