Какие веб-браузеры используют __proto__
? Состояние Mozilla:
Обратите внимание, что
__proto__
может быть недоступен в версиях JavaScript, отличных от версии в Mozilla.
Какие веб-браузеры используют __proto__
? Состояние Mozilla:
Обратите внимание, что
__proto__
может быть недоступен в версиях JavaScript, отличных от версии в Mozilla.
Нажмите здесь для вашего ответа.
Подробнее
Самый общий способ - проверить эту страницу в разных браузерах:
<html>
<head>
<script type="text/javascript">
function a() {}
if ( (new a).__proto__ === a.prototype )
alert('supported');
</script>
</head>
</html>
Сообщает, поддерживает ли браузер __proto__
. Я отправил его browsershots.org, который создаст скриншоты страницы во многих разных браузерах. Таким образом, вы должны увидеть - с помощью предупреждающего сообщения - какой браузер его поддерживает.
Руководство по безопасности браузера содержит таблицу, показывающую, какие браузеры выставляют __proto__
.
В настоящее время эти браузеры:
Те, кого исключили:
Конец отправленного вами предложения See below for workarounds.
, где обсуждается альтернативный метод extends()
, который использует super.prototype
:
function extend(child, super){
for (var property in super.prototype) {
if (typeof child.prototype[property] == "undefined")
child.prototype[property] = super.prototype[property];
}
return child;
}
Это не прямой ответ на вопрос, но он может помочь тем, кто хочет знать прототип экземпляра объекта (это то, что часто используется __proto__
). Все современные браузеры (включая IE9) поддерживают getPrototypeOf()
, которые могут быть использованы для определения прототипа объекта. Ирония судьбы заключается в том, что некоторые по-прежнему фактические браузеры, такие как IE7 и IE8, которые не поддерживают Object.getPrototypeOf(obj)
, также не поддерживают obj.__proto__
. Для этих браузеров вы можете использовать obj.constructor.prototype
. Однако это немного опасно, потому что это свойство можно переопределить.