Как получить доступ к свойствам из цепочки прототипов, которые скрыты под собственными свойствами? - PullRequest
4 голосов
/ 20 августа 2011

Давайте создадим объект, который наследуется от другого анонимного объекта:

var obj = Object.create({
    func: function () { alert('Inherited method'); }
});

Теперь obj наследует метод func от этого анонимного объекта (ссылка на прототип obj указывает на этот анонимный объект).

obj.func(); // alerts 'Inherited method'

Но если мы назначим свойство func для самого obj, унаследованное свойство func будет shadowed :

obj.func = function () { alert('Own method'); };

obj.func(); // alerts 'Own method'

Демонстрация в реальном времени: http://jsfiddle.net/PLxHB/

Теперь, если мы хотим вызвать этот затененный метод func (тот, который предупреждает 'Inherited method'), что было бы хорошим способом сделатьчто?

Я уже придумала одно решение - см. здесь - но это что-то вроде хака.

1 Ответ

3 голосов
/ 20 августа 2011
Object.getPrototypeOf(obj).func();

обеспечит выполнение унаследованной функции.

В более старых браузерах (выше ES5) вы можете использовать

obj.__proto__.func();

, но это не рекомендуется.

http://jsfiddle.net/pimvdb/PLxHB/5/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...