Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как опознать RegExp. (https://javascript.ru/forum/misc/4224-kak-opoznat-regexp.html)

Kolyaj 03.07.2009 15:42

А вы уверены, что Object.prototype.toString не используется нигде в нативных объектах/функциях? Просто таким финтом вы не обманули какую-то конкретную функцию, а потенциально сломали все. Сломать и обмануть -- разные вещи. Проще было написать
var isArray = function() { return false; };

Riim 03.07.2009 15:46

Цитата:

Сообщение от Kolyaj
А вы уверены, что Object.prototype.toString не используется нигде в нативных объектах/функциях?

А что используется?

Dmitry A. Soshnikov 03.07.2009 16:11

Цитата:

Сообщение от Kolyaj
Это не обмануть.

формально, [[Class]] host-объектов может быть и "RegExp", в таком случае - обмануть, практически же - не знаю, какая из реализаций такое может сделать, но стандарт не запрещает.

Octane 03.07.2009 16:12

Riim, твой пример равносилен следующему:
Object = null;
alert(Object);

Все в пределах разумного же должно быть. Вот пример c opera, ведь никто не застрахован от того, что его скрипт не подключется после того, как в глобальном пространстве имен будет создана переменная opera? А если еще вспомнить, что IE добавляет глобальные ссылки на DOM-элементы по именам идентификаторов…

Цитата:

Сообщение от Kolyaj
ну хоть бы дал подумать

:D ладно в следующий раз не буду спешить)

Dmitry A. Soshnikov 03.07.2009 16:14

Цитата:

Сообщение от Kolyaj
ну хоть бы дал подумать

какой тут подумать, тут чисто - получить соответсвующую инфу (либо знаешь, либо не знаешь), вопрос не "на подумать" ;)

Kolyaj 03.07.2009 16:21

Dmitry A. Soshnikov,
я ж специально не isArray выбрал :). На regexp'ы в фреймворках проверки обычно нет. Так что тут задача была скорее в проведении аналогии. С чем, к сожалению, у многих проблемы.

Riim 03.07.2009 16:24

Я так и не понял, почему заменять методы в prototype конструкторов - плохо. Вроде это стандартная практика.

Dmitry A. Soshnikov 03.07.2009 16:26

Kolyaj, да какая разница "Array" или "RegExp"; по стандарту, host-объекты могут иметь в качестве [[Class]] любое значение, включая, используемые стандартными объектами ECMA (я, кстати, подправил коммент, где "Array" написал).

Dmitry A. Soshnikov 03.07.2009 16:28

Цитата:

Сообщение от Riim
Я так и не понял, почему заменять методы в prototype конструкторов - плохо. Вроде это стандартная практика.

Пока нельзя выставлять {DontEnum} свойствам, плохо (с практической точки зрения) добавлять свойства в Object.prototype, в остальных случаях - если идеология позволяет - почему нет?

Riim 03.07.2009 16:35

Цитата:

Сообщение от Dmitry A. Soshnikov
добавлять свойства в Object.prototype

Да, кстати даже при замене (не добавлении) в for-in попадает.


Часовой пояс GMT +3, время: 08:44.