Свойството __proto__ и връзката му с прототипа

В предишната статия бе споменато свойството__proto__, както обещах, ще го опиша в тази статия.

При достъп до което и да е свойство на обект, то първо се търси в самия обект:

Но ако не е там, търсенето се извършва в свойството__proto__:

Ако и той не е там, се търси по-надолу по веригата:

Тази верига се нарича прототипна верига (прототипна верига).

За всекиxобект (с изключение наnullиundefined, както вече беше споменато), горният код ще изведеtrue.

Използване на свойството __proto__ в скриптове

Както писах по-рано, свойството__proto__е скрито и не е описано в езиковата спецификация. Съответно използването му (както направих в предишната статия)е крайно нежелателно. И да го използвате директно и като цяло е опасно, тъй като обвързва скрипта с конкретна реализация на интерпретатора. Тъй като тази реализация е недокументирана, тя може да бъде променена по всяко време и написаният код ще спре да работи в следващата версия на браузъра.

Ако все още трябва да промените свойството__proto__, тогава спецификацията на ECMA Script 5 съдържа два метода, които ви позволяват да манипулирате "безопасно" това свойство. Това са методитеObject.createиObject.getPrototypeOf.

Тяхната логика е следната:

Създава обект, чието свойство__proto__е зададено на предавания обект.

Заменя свойствотоaна обект__proto__, който вече е създаден.