Простым объектам Javascript можно было присоединить событие к ним? Скажите что-то вроде этого:
obj = new Object();
obj.addEventListener('doSomething', foo, true);
Я знаю, что могу сделать это с jQuery, но действительно ли это возможно без какой-либо библиотеки?
Нет, доступ к управляемым объектам в деструкторе невозможен: сюда входят COM RCW.
Вместо этого реализуйте стандартный образец IDisposable и освобождайте COM-объекты методом Dispose (bool), как одноразовый управляемый объект.
-121--3595031-Можно определить метод addEventListener для сбора всех объектов прослушивателя, и код может вызывать их в любое время. Это просто программирование OO. Определите addXListener, добавьте объект, переданный как параметр где-либо, и когда что-то случится, вызовите методы.
Да.
Но помните, что события пользовательского интерфейса определяются HTML/Javascript, поэтому то, что вы будете программировать, будет только для вашего объекта «obj», чтобы предупредить о ваших событиях.
На примере:
FunnyProcessor
+ addStartListener(...)
+ addProcessingListener(...)
+ addEndListener(...)
+ doStuff()
и doSuff вызовут сначала начальные прослушиватели, затем сделают некоторый цикл и для каждой итерации обработки вызовов прослушиватели, а в конце вызова прослушиватели.
-121--2347112-Для этого вам придется реализовать собственную функциональность, но это не очень сложно.
var obj = {
events: {},
addEventListener: function(eventName, handler) {
if(!(eventName in this.events))
this.events[eventName] = [];
this.events[eventName].push(handler);
},
raiseEvent: function(eventName, args) {
var currentEvents = this.events[eventName];
if(!currentEvents) return;
for(var i = 0; i < currentEvents.length; i++) {
if(typeof currentEvents[i] == 'function') {
currentEvents[i](args);
}
}
},
click: function() {
// custom 'click' function. when this is called, you do whatever you
// want 'click' to do. and then raise the event:
this.raiseEvent('onClick');
}
};
Нет. addeventListener
- это особенность DOM, а не JS.
Не напрямую, но вы добавляете необходимые публикуют / подписаться
инфраструктуру для любого из них.
Я думаю, что в простом JavaScript, только у DOM-объектов могут быть события.
Нет, единственное, что имеют JavaScript-объекты - это свойства. Значения этих свойств могут быть:
Нет.
Тем не менее, вы можете внести собственную реализацию путем написания addeventListener
и другие функции и сохраняя список обработчиков для каждого события.
Например: (непроверенный)
function addEventListener(name, handler) {
if (!this.events) this.events = {};
if (!this.events[name]) this.events[name] = [];
this.events[name].push(handler);
}
function removeEventListener(name, handler) {
if (!this.events) return;
if (!this.events[name]) return;
for (var i = this.events[name].length - 1; i >= 0; i--)
if (this.events[name][i] == handler)
this.events[name].splice(i, 1);
}
function raiseEvent(name, args) {
if (!this.events) return;
if (!this.events[name]) return;
for (var i = 0; i < this.events[name].length; i++)
this.events[name][i].apply(this, args);
}
var obj = ...;
obj.addEventListener = addEventListener;
obj.removeEventListener = removeEventListener;
obj.raiseEvent = raiseEvent;
Нет, не в той степени, в которой вы можете добавить обработчик событий на любой объект. Вы можете написать свою собственную систему событий для объектов, хотя, если вы пишете какой-то API или библиотека для других сценариев для взаимодействия.
Вы можете определить метод addEventListener для сбора всех объектов слушателя, и ваш код может позвонить им в любое время. Это просто программирование. Определите AddXListener, добавьте объект, переданный в качестве параметра где-то где-то, и когда что-то происходит, вы называете его методами.
Да.
Но помните, что мероприятия пользовательского интерфейса определяются HTML / JavaScript, поэтому вы будете программировать, будет только для вашего объекта «OBJ», чтобы предупредить о ваших событиях.
На примере:
FunnyProcessor
+ addStartListener(...)
+ addProcessingListener(...)
+ addEndListener(...)
+ doStuff()
и DOSUFF будут вызывать первыми слушателями начала, затем выполните некоторую петлю и для каждой итерационной обработки вызовов прослушивателей, а также в конце прослушивателя конечных вызовов.