восстановить родной сеттер / получатель

Я изучил, как работает геттер / сеттер ...

document.body.innerHTML = 'This will change the site';

Object.defineProperty(document.body, 'innerHTML', {
    get: function(){
        console.log('[FAKED] document.innerHTML');
        return false;
    },
    set: function(val){
        console.log('[FAKED] document.innerHTML = '+val);
        return false;
    }
});

alert(document.body.innerHTML); // false

Это может быть полезно, если браузер не поддерживает innerHTML или вы хотите сделать хороший опрос для <progress>. Однако если вы достаточно глупы, чтобы выполнить этот код. как вы могли вернуть его к прежнему состоянию?


person Endless    schedule 06.05.2012    source источник
comment
Что значит откат? Это выполняется на вашей веб-странице, поэтому вам придется перезагрузить страницу без этой части сценария, нет?   -  person Py.    schedule 07.05.2012
comment
Какие браузеры не поддерживают innerHTML? :)   -  person epascarello    schedule 07.05.2012
comment
То, что следует учитывать, это, вероятно, лучшая практика; например, не перезаписывайте встроенные функции браузера, если вы не намерены создавать несовместимость.   -  person Quintin Robinson    schedule 07.05.2012
comment
вы можете легко вернуть код, нажав Ctrl+A, а затем Delete;)   -  person Aprillion    schedule 07.05.2012
comment
просто взял в качестве примера innerHTML ...   -  person Endless    schedule 07.05.2012
comment
Если вы намереваетесь создать polyfill, никогда не должно быть необходимости restore, поскольку они должны заполнять только пробелы - if (!('innerHTML' in document.body)) Object.defineProperty(...);   -  person Jonathan Lonowski    schedule 07.05.2012


Ответы (1)


Вы уничтожили определение браузера .innerHTML.

Назад дороги нет ...

person PitaJ    schedule 06.05.2012
comment
Очень плохо - person Endless; 07.05.2012
comment
вы можете получить собственный код откуда-то еще и переопределить innerHTML, не спрашивайте меня, где - person PitaJ; 07.05.2012
comment
Я понятия не имею. Я предлагаю переустановить ваш браузер, если для вас это так важно. Подождите, вы спрашивали меня или его? - person PitaJ; 07.05.2012
comment
спросил PitaJ ... Подумывал о создании полифила для неподдерживаемого видеокодека ... чтобы вы могли получить video.curentTime из flash / quicktime player и вернуть его обратно в html5 со всеми событиями и такими вещами - person Endless; 07.05.2012