Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.05.2016, 19:56
Новичок на форуме
Отправить личное сообщение для SafeSoft Посмотреть профиль Найти все сообщения от SafeSoft
 
Регистрация: 24.05.2016
Сообщений: 1

Обход 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.

Как нибудь вообще можно корректно наследовать встроенные объекты JavaScript?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не сохраняются настройки grid Fubu_By ExtJS 1 09.07.2013 21:49
Глюк firebug'а trikadin Оффтопик 23 16.01.2012 14:04
относительная высота zmaxon ExtJS 13 04.10.2010 12:42
Окно открывается только один раз altermann ExtJS 8 22.04.2010 11:55
Правильный ответ или неправильный Kevrat Ваши сайты и скрипты 7 13.01.2010 21:31