2016-03-17 3 views
1

Является ли стандартизация __proto__ в ES2015 отрицательной необходимостью для Object.getPrototypeOf?Do __proto__ и Object.getPrototype демонстрируют точно такую ​​же функциональность?

+0

Не будет ли этот вопрос более уместным для http: // программистов .stackexchange.com? – CodingGorilla

+0

Мой вопрос: do '__proto__' и' Object.getPrototype' выставлять точно такую ​​же функциональность? – Ben

+0

@CodingGorilla при обращении к другим сайтам часто бывает полезно указать, что [перекрестная публикация неодобрительно] (http://meta.stackexchange.com/tags/cross-posting/info) – gnat

ответ

7

Do __proto__ и Object.getPrototype скрыть точно такую ​​же функциональность?

Номер .__proto__ работает только с объектами, которые наследуют от Object.prototype. И Object.getPrototype не позволяет мутировать прототип.

стандартизация __proto__ в ES2015 отрицает ли необходимость Object.getPrototypeOf?

У вас есть это в обратном направлении. ES5 Object.getPrototypeOf и ES6 Object.setPrototypeOf полностью отрицают необходимость когда-либо использовать __proto__.

Свойство accessor только для ES6 стандартизировано для обратной совместимости и совместимости между реализациями, которые в ней нуждаются. Он явно обозначен как функция веб-наследия. Проверьте note on Annex B... устаревшие функции [для] реализаций ECMAScript на основе веб-браузера. [Они] имеют [...] нежелательные характеристики и [...] будут удалены из этой спецификации [если не используются] большим количеством существующих веб-страниц [ ...]. Программисты не должны использовать или предполагать существование [их] при написании нового кода ECMAScript. Реализации ECMAScript не рекомендуется использовать эти функции. ")

+0

Вы, кажется, говорите, что никогда не нужно использовать '__proto__'. Ваша позиция поддерживается котировкой вашего приложения B, а также предупреждением MDN на [MDN proto] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto). Однако на той же странице показана хорошая поддержка мобильных браузеров, тогда как [MDN getPrototypeOf] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf) показывает вопросительные знаки для мобильных устройств поддержка браузера. Так что, если проекту нужна поддержка мобильного браузера, не может ли предпочтительнее использовать '__proto__' в этом случае? – Marcus

+1

@Marcus No. Предпочтительно использовать полифонию 'Object.getPrototypeOf' (которая реализуется с помощью' __proto__') для поддержки старых браузеров. Кстати, знак вопроса означает, что «никто не обнаружил самую раннюю версию с поддержкой и не ввел ее в таблицу», а не «плохая поддержка». Я даже поставил бы под сомнение единодушное «Да», конечно, некоторые ранние мобильные браузеры не реализовали '__proto__'. В любом случае «Object.getPrototypeOf» поддерживается каждым движком ES5, и в любом случае у вас будет множество других проблем в старых (ES3). – Bergi

Смежные вопросы