Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Прототипы для Node на IE


Автор: anthonyBoard 10.12.2008, 03:17
Доброй ночи!

Уважаемые товарищи, помогите вразумить IE. Ну ни в какую он не хочет создавать прототипы для Node.

Пробовал такой вариант:
Код

if(window.Node && !Node.prototype){
    var node = document.createTextNode('');
    var Node = node.constructor;
}
if(window.Node){
    Node.prototype.моя_функция= function(){

    }
}

но 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
Цитата(An6rey @  12.12.2008,  01:14 Найти цитируемый пост)
IE Object не наследуется элементами

Да ну??? А как же постулат js, что все есть объект? - от строки до документа ...

Автор: Zeroglif 12.12.2008, 12:27
Цитата(IDVsbruck @  12.12.2008,  05:55 Найти цитируемый пост)
Да ну??? А как же постулат js, что все есть объект? - от строки до документа ... 

Если под постулатом понимать тиражируемую глупость, то да, постулат... ;)

Автор: anthonyBoard 14.12.2008, 00:15
Цитата(IDVsbruck @  12.12.2008,  00:12 Найти цитируемый пост)
document.getElementById('id элемента') возвращает не Node, а Object.

а не 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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)