Переопределяющая собственная функция?

Собственный компонент 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.

14
задан Justin Johnson 27 February 2010 в 09:07
поделиться

3 ответа

FWIW (информационный): вы можете переопределить "собственные" методы в некоторых случаях и, по крайней мере, в некоторых браузерах. Firefox позволяет мне сделать это:

document.createElement = function(f) { alert(f); };

Что при вызове делает то, что вы ожидаете. Но весь ваш блок кода выше выдает ошибку, по крайней мере, через Firebug.

С философской точки зрения вы должны уметь это делать. Вы, конечно, можете, скажем, переопределить методы объекта Array и т. Д. Но методы окна (DOM) не охватываются ECMAScript, и поэтому им, вероятно, разрешено быть зависимыми от реализации. И, конечно же, из соображений безопасности.

3
ответ дан 1 December 2019 в 13:47
поделиться

Насколько мне известно, вы не можете переопределить собственные методы по соображениям безопасности. Для неродных методов это вообще не проблема.

1
ответ дан 1 December 2019 в 13:47
поделиться

Почему бы просто не использовать метод в своей собственной функции - написать его так, как вы хотите, и никогда больше не писать 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'});
3
ответ дан 1 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: