| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Прототипы для Node на IE |
| Автор: anthonyBoard 10.12.2008, 03:17 | ||
| Доброй ночи! Уважаемые товарищи, помогите вразумить IE. Ну ни в какую он не хочет создавать прототипы для Node. Пробовал такой вариант:
но IE это не вразумило, он начинает ругаться при обращении document.getElementById('id элемента').моя_функция(). "моя_функция" - это конечно не настоящее название функции, а getElementById - получает хендл DIV'а. Заранее благодарен за помощь! |
| Автор: anthonyBoard 11.12.2008, 20:31 |
| Что-то такое подозрение, что IE не поддерживает прототипы для DOM. Ни для Element ни для Node прототипы не создаются. У кого-нибудь есть какие соображения на эту тему? |
| Автор: IDVsbruck 12.12.2008, 00:12 |
| document.getElementById('id элемента') возвращает не Node, а Object. Поэтому от назначения нового метода для Node ты ничего не выигрывашь. А ИЕ очень даже хорошо поддерживает прототипы. Кстати, из описаний: "Свойство prototype позволяет расширить функциональность встроенных объектов JavaScript." Встроенные объекты - это String, Array, Function, Date, Object и др. |
| Автор: An6rey 12.12.2008, 01:14 |
| IDVsbruck, в IE Object не наследуется элементами. Для этого в prototype.js при доступе к элементу эти свойства дописываются программно. Но использовать дополнительные свойства в Object является плохим ходом. Это давно обсуждалось и является одним их плюсов jQuery, которая оставляет в покое Object.prototype. Отрицательных момента по крайней мере два: 1) С JSON объектом не получится работать как с ассоциативным массивом (появятся лишние свойства) 2) С массивами нельзя будет работать при помощи цикла for...in |
| Автор: IDVsbruck 12.12.2008, 05:55 |
Да ну??? А как же постулат js, что все есть объект? - от строки до документа ... |
| Автор: anthonyBoard 14.12.2008, 00:15 | ||
а не Element? Почему же все браузеры кроме IE работают как и предполагается? Если я создам прототип Element.prototype.функция или Node.prototype.функция - Mozilla, Opera, Safari будут дальше с этим работать без каких либо проблем. Добавлено @ 00:17 Хотя может быть действительно возвращается Object, но тогда почему, опять таки, не возникает никаких проблем в вышеуказанных трех браузерах? |
| Автор: anthonyBoard 3.1.2009, 02:39 |
| Решил вернуться к этой теме, т.к. вопрос до сих пор не решен. Существуют ли какие-нибудь варианты, чтобы добавить объекту функцию? Просто хочется красоты и аккуратности в коде. Вот тут речь шла о программном добавлении функций, это на сколько я понимаю делается следующим образом: 1. Функция $ получает хендел элемента 2. Добавляет функции 3. Возвращает все это дело Я правильно понял? Думаю в моем случае это будет единственный и верный вариант. И еще терзает вопрос, почему в Firefox и Opera работает вариант, если я добавляю прототипы в Node и getElementById потом получаю объект - все функции прототипные Node доступны, а в IE нет. Firefox и Opera возвращают в getElementById Node? |
| Автор: An6rey 3.1.2009, 13:09 |
| Да ты понял правильно. В Опере и ФФ это так потому что они так написаны. По поводу ИЕ нужно еще сказать спасибо, что можно использовать тот вариант который ты описал ($) Они могли бы не давать и ту возможность и тупо реализовать спецификацию DOM (DHTML) без возможности добавлять новые функции и свойства. |
| Автор: DenVdmj 3.2.2009, 06:03 |
| anthonyBoard, читайте тут: http://forum.vingrad.ru/forum/topic-189669/view-all.html + еще: http://forum.vingrad.ru/act-ST/f-74/t-175689.html |