Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Наследование DOM интерфейсов (https://javascript.ru/forum/events/46665-nasledovanie-dom-interfejjsov.html)

FINoM 18.04.2014 20:48

Наследование DOM интерфейсов
 
Здравствуйте.
Сегодня сделал для себя открытие, что не получается унаследовать ДОМ интерфейс, EventTarget в частности.
X = function() {};
X.prototype = Object.create( EventTarget.prototype );
var x = new X;
x.addEventListener( 'y', function() {} );


Выдает ошибку:
Код:

TypeError: Illegal invocation

Что я делаю не так? Всегдя был убежден, что прототипы интерфейсов можно наследовать, оказалось, что не всё так просто...

Sweet 18.04.2014 21:13

К сожалению, нет времени вникать, а с EventTarget никогда не работал, но возможно, проблема в том, что нужно реализовать метод .valueOf. Вот пример с наследования String для понимания, о чём я:
function MyString(value) {
    this.value = value;
}

MyString.prototype = Object.create(String.prototype);

// если не будет .toString, возникнет ошибка
MyString.prototype.toString = function () {
    return this.value;
};

var test = new MyString("test");

alert(test.split(""));

Octane 19.04.2014 00:30

Ошибка же не в Object.create возникает, а уже при вызове addEventListener, поэтому и TypeError, что addEventListener внутри хочет видеть базу (this) в виде DOM-элемента.

http://www.html5rocks.com/en/tutoria...ustomelements/
https://github.com/Polymer/CustomElements

FINoM 01.05.2014 18:08

Sweet, не читай, отвечай.
Цитата:

Сообщение от Octane
Ошибка же не в Object.create возникает, а уже при вызове addEventListener

Правда что ли?
Цитата:

Сообщение от Octane
в виде DOM-элемента

В виде DOM объекта, скорее.

Octane 01.05.2014 18:16

Цитата:

Сообщение от FINoM
Правда что ли?

ну да, я в консоли попробовал, прежде чем писать :)

Цитата:

Сообщение от FINoM
В виде DOM объекта, скорее.

да, так точнее, EventTarget не только элементы наследуют

FINoM 01.05.2014 18:18

Цитата:

Сообщение от Octane
ну да, я в консоли попробовал, прежде чем писать

Это был сарказм.


Часовой пояс GMT +3, время: 13:42.