Итак, я прочитал отказ от ответственности и предупреждения MDN. я прочитал отличный ответ по теме, но я все еще хочу кое-что узнать. Этот вопрос на самом деле возник из ответа, который я дал на другой вопрос, здесь.
Допустим, я решил сделать черное дело. То, о чем я буду жалеть всю оставшуюся жизнь. Что-то, что навсегда запятнает меня стыдом и опозорит мою фамилию. Целенаправленное, преднамеренное окончание...
Ладно, хватит об этом. Во всяком случае, вот:
let proto = Object.getPrototypeOf(Function.prototype);
Object.setPrototypeOf(Function.prototype, {
iBetterHaveAGoodReasonForDoingThis : "Bacon!"
});
//just to prove it actually worked
let f = (function(){});
console.log(f.iBetterHaveAGoodReasonForDoingThis);
// Quick, hide the evidence!!
Object.setPrototypeOf(Function.prototype, proto);
По сути, то, что я там сделал, это изменил прототип Function.prototype
, объекта, который влияет практически на каждый фрагмент кода JavaScript, который вы можете написать. Потом поменял обратно.
Я хотел проиллюстрировать большое изменение в цепочке прототипов, которое повлияет на большую часть кода и приведет к тому, что многие оптимизации пойдут насмарку. Я не ожидаю, что изменение его обратно что-то исправит (во всяком случае, я ожидаю, что это ухудшит производительность). Я хотел бы знать, будет это или нет, но если это произойдет, это не было моим намерением.
Я просто хочу знать, начнет ли после такого изменения среда JavaScript восстанавливаться и снова начинать оптимизацию? Или он просто сдастся навсегда и будет запускать все в деоптимизированном режиме? Существуют ли оптимизации, которые никогда не будут достигнуты из-за этого? Могу ли я верить, что в конце концов, после периода восстановления, он вернется в свое обычное состояние?
Для контекста я говорю о таких движках, как самая последняя версия V8, а не о примитивном дерьме, используемом такими вещами, как Internet Explorer. Я понимаю, что ответ может быть разным в разных системах, но я надеюсь, что между ними есть что-то общее.