Свойството __proto__ и връзката му с прототипа
В предишната статия бе споменато свойството__proto__, както обещах, ще го опиша в тази статия.
При достъп до което и да е свойство на обект, то първо се търси в самия обект:
Но ако не е там, търсенето се извършва в свойството__proto__:
Ако и той не е там, се търси по-надолу по веригата:
Тази верига се нарича прототипна верига (прототипна верига).
За всекиxобект (с изключение наnullиundefined, както вече беше споменато), горният код ще изведеtrue.
Използване на свойството __proto__ в скриптове
Както писах по-рано, свойството__proto__е скрито и не е описано в езиковата спецификация. Съответно използването му (както направих в предишната статия)е крайно нежелателно. И да го използвате директно и като цяло е опасно, тъй като обвързва скрипта с конкретна реализация на интерпретатора. Тъй като тази реализация е недокументирана, тя може да бъде променена по всяко време и написаният код ще спре да работи в следващата версия на браузъра.
Ако все още трябва да промените свойството__proto__, тогава спецификацията на ECMA Script 5 съдържа два метода, които ви позволяват да манипулирате "безопасно" това свойство. Това са методитеObject.createиObject.getPrototypeOf.
Тяхната логика е следната:
Създава обект, чието свойство__proto__е зададено на предавания обект.
Заменя свойствотоaна обект__proto__, който вече е създаден.