Недавно созданный CustomEvent не имеет собственного свойства ("type"), поэтому jQuery завершается ошибкой? - PullRequest
0 голосов
/ 07 октября 2019

Я работаю над очень простым классом, который использует (очень) частные события.

Поскольку я не хочу, чтобы этот класс зависел от jQuery, я использую простые CustomEvent s (хотя я работаю с jQuery)

Сюрпризом было то, что jQuery не удалось запустить мое событие, сюрпризом 2 было то, что jQuery тестирует hasOwnProperty("type") на CustomEvent, и это FALSE

Короче говоря: (Редактировать: JunctionEvent вводил в заблуждение - это только строка «ju-ac» - поэтому я изменил ее в своем примере)

    junctionevent = "ju-ac"

    e = new CustomEvent(junctionevent, {bubbles: options.bubbles, composed: true})
    console.log e, e.type, e.hasOwnProperty("type")

говорит («ju-ac» - это название или тип события на этом этапеof development):

ju-ac { target: null, isTrusted: false, eventPhase: 0, bubbles: true, cancelable: false, returnValue: true, defaultPrevented: false, composed: true, timeStamp: 9808, cancelBubble: false, … }
 ju-ac 
 false

То есть у события есть тип «свойство», имя «ju-ac», но нет свойства с именем «тип»?

Что я делаю не так? (или что jQuery делает неправильно?)

РЕДАКТИРОВАТЬ: я только что узнал, что jQuery не может обрабатывать обычные CustomEvents в качестве ввода события, он обрабатывает такие же данные события (как любой другой объект на входе) - эта ставкаЯ потеряла. Это не меняет моего вопроса: почему событие после создания свойства type содержит строку «xxxx», но hasOwnProperty («type») возвращает FALSE

1 Ответ

1 голос
/ 07 октября 2019

Причина, по которой вы видите свойство type во вновь созданном экземпляре CustomEvent, и в то же время вы получаете false при использовании вызова метода hasOwnProperty('type'), заключается в том, что свойство type является унаследованным свойством отEvent Объект через цепочку прототипов, а не свойство, непосредственно принадлежащее вновь созданному экземпляру.

Таким образом, экземпляр e наследует свойства от своего конструктора CustomEvent, а CustomEvent наследует свойства отего собственный конструктор, объект Event, который является владельцем свойства type.

Вы можете следовать цепочке прототипов вплоть до объекта Event и посмотреть, как hasOwnProperty("type") возвращает истину следующим образом:

let e = new CustomEvent("ju-ac");

e.type; // "ju-ac";
e.hasOwnProperty("type");   // false

// One step deep into the prototype chain
e.__proto__.constructor;   // CustomEvent
e.__proto__.hasOwnProperty("type");   // false

// Two steps deeper into the prototype chain
e.__proto__.__proto__.constructor;   // Event
e.__proto__.__proto__.hasOwnProperty("type");   // true

Событие: "CustomEventЯ твой отец! "

CustomEvent: " Нееееееет! "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...