Собственный компонент document.createElement()
глупо-глупо (требуется только имя тега и никакие атрибуты). Каким образом я не могу переопределить его? Каким образом это не работает?
var originalFunction = document.createElement;
document.createElement = function(tag, attributes) {
var element = originalFunction(tag);
if (attributes) {
for (var attribute in attributes) {
element.setAttribute(attribute, attributes[attribute]);
}
}
return element;
};
Проблема состоит в том, что браузеры аварийно завершаются, когда Вы пытаетесь заменить собственную функцию. С тех пор document
не примитивный JavaScript, Вы не можете создать прототип для него также. WTF.
FWIW (информационный): вы можете переопределить "собственные" методы в некоторых случаях и, по крайней мере, в некоторых браузерах. Firefox позволяет мне сделать это:
document.createElement = function(f) { alert(f); };
Что при вызове делает то, что вы ожидаете. Но весь ваш блок кода выше выдает ошибку, по крайней мере, через Firebug.
С философской точки зрения вы должны уметь это делать. Вы, конечно, можете, скажем, переопределить методы объекта Array и т. Д. Но методы окна (DOM) не охватываются ECMAScript, и поэтому им, вероятно, разрешено быть зависимыми от реализации. И, конечно же, из соображений безопасности.
Насколько мне известно, вы не можете переопределить собственные методы по соображениям безопасности. Для неродных методов это вообще не проблема.
Почему бы просто не использовать метод в своей собственной функции - написать его так, как вы хотите, и никогда больше не писать document.createElement ....
document.create= function(tag, parent, attributes){
tag= document.createElement(tag);
for(var p in attributes){
if(p== 'css') tag.style.cssText= attributes.css;
else if(p== 'text') tag.appendChild(document.createTextNode(attributes.text));
else tag[p]= attributes[p];
}
if(parent) parent.appendChild(tag);
return tag;
}
document.create('p',document.body,{css:'font-style:italic',className:'important',title:'title',
text:'whatever text you like'});