Могу ли я создать пользовательское событие в Javascript для объекта, который я создал?
Предположим, что у меня есть объект с функцией-членом, которая возвращает себя:
/* -- Object 1 -- */
function Object1(){
this.me = new Image(10,10);
this.me.src = "someImgUrl.jpg";
this.publish = function(){
return this.me;
}
}
В производстве:
var Obj1 = new Object1();
document.body.appendChild( Obj1.publish() );
Теперь предположим, что я хотел создать событие, которое срабатывает при вызове метода object(), но после возврата изображения (что-то похожее на событие onPublished() "). Скажем, чтобы изменить размеры изображения на 100x100. Как я могу создать его, и где бы я его" привязал"?
Если я не буду достаточно ясным, сообщите мне. Это самая простая демонстрация, о которой я мог подумать.
Ответы
Ответ 1
Простой пример:
function Object1() {
'use strict';
this.me = new Image(10, 10);
this.me.src = "someImgUrl.jpg";
this.publish = function() {
if (typeof this.onPublish === "function") {
setTimeout(this.onPublish, 1);
}
return this.me;
};
}
var Obj1 = new Object1();
Obj1.onPublish = function() {
// do stuff
};
Obj1.publish();
Ответ 2
В качестве альтернативы вы можете использовать стороннюю фреймворк (например, bob.js) для определения пользовательских событий на ваших объектах. Есть два подхода, но я покажу только один:
var DataListener = function() {
var fire = bob.event.namedEvent(this, 'received');
this.start = function(count) {
for (var i = 0; i < count; i++) {
fire(i + 1);
}
};
};
var listener = new DataListener();
listener.add_received(function(data) {
console.log('data received: ' + data);
});
listener.start(5);
// Output:
// data received: 1
// data received: 2
// data received: 3
// data received: 4
// data received: 5