Могу ли я создать собственное событие в Javascript для объекта, который я создал? - PullRequest
10 голосов
/ 26 ноября 2010

Предположим, у меня есть объект с функцией-членом, которая возвращает себя:

/* -- 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() );

Теперь предположим, что я хотел создать событие, которое срабатывает при вызове метода объекта publish (), но после возвращения изображения (что-то похожее на событие "onPublished ()"). Скажем, чтобы изменить размеры изображения на 100х100. Как бы я его создал и куда бы я его "прикрепил"?

Если я не достаточно ясен, пожалуйста, дайте мне знать. Это самое простое демо, которое я мог придумать.

Ответы [ 2 ]

8 голосов
/ 26 ноября 2010

Простой пример:

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();
0 голосов
/ 06 апреля 2013

Кроме того, вы можете использовать некоторые сторонние фреймворки (такие как 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...