Обход Object.defineProperty({configurable: true})
У меня такая проблема. Мне нужно изменить свойство объекта защищённого от переопределения функцией Object.defineProperty({configurable: true}).
Я пытаюсь сделать это через наследование, которого понятно нет в JavaScript. Для этого беру функции которые предложены для таких задач гурами javascript: function extend(Child, Parent) { var F = function() { } F.prototype = Parent.prototype Child.prototype = new F() Child.prototype.constructor = Child Child.superclass = Parent.prototype } // копирует все свойства из src в dst, // включая те, что в цепочке прототипов src до Object function mixin(dst, src){ // tobj - вспомогательный объект для фильтрации свойств, // которые есть у объекта Object и его прототипа var tobj = {} for(var x in src){ // копируем в dst свойства src, кроме тех, которые унаследованы от Object if((typeof tobj[x] == "undefined") || (tobj[x] != src[x])){ try { dst[x] = src[x]; } catch (e) { console.error("Error property: " + x); } } } // В IE пользовательский метод toString отсутствует в for..in if(document.all && !document.isOpera){ var p = src.toString; if(typeof p == "function" && p != dst.toString && p != tobj.toString && p != "\nfunction toString() {\n [native code]\n}\n"){ dst.toString = src.toString; } } } Далее мой код вылетающий по ошибке на dispatchEvent: var myKeyboardEvent = function() { this.getLastElement = function() { return this[this.length-1]; } } extend(myKeyboardEvent, KeyboardEvent); //elem может быть любое поле <input type="text" name="elem" id="elem"> function pressKey(elem){ var evt = new myKeyboardEvent("keypress"); mixin(myKeyboardEvent.prototype, new KeyboardEvent("keypress")); elem.dispatchEvent(evt); } Получаю ошибку: Uncaught TypeError: Failed to execute 'dispatchEvent' on 'EventTarget': parameter 1 is not of type 'Event'. Мне надо переопределить свойство isTrusted в объекте возвращаемом KeyboardEvent. :blink:Как нибудь вообще можно корректно наследовать встроенные объекты JavaScript? |
Часовой пояс GMT +3, время: 19:36. |