这三段代码效果相同,比较一下还有点意思:
C++:
#include <iostream>

class EventHandler {
public:
virtual void handleEvent() = 0;
};

class Object {
public:
int id;
EventHandler* eventHandler;
Object(int id) {this->id = id;}
};

class ObjectHandler : public EventHandler {
public:
Object* sender;
ObjectHandler(Object* sender) {this->sender = sender;}
void handleEvent() {std::cout << "Event Done: Object: " << sender->id << std::endl;}
};

int main()
{
int size = 2;
Object* objs[size];
for (int i = 0; i < size; i++) {
objs[i] = new Object(i);
}

for (int i = 0; i < size; i++) {
objs[i]->eventHandler = new ObjectHandler(objs[i]);
}

for (int i = 0; i < size; i++) {
objs[i]->eventHandler->handleEvent();
}

return 0;
}
Java:
public class Test {

public static void main(String[] args) throws Exception {
for (int i = 0; i < objs.length; i++) {
final Object obj = objs[i];
obj.eventHandler = new EventHandler() {
public void handleEvent() {
System.out.println("Event Handled: Object: " + obj.id);
}
};
}
for (int i = 0; i < objs.length; i++) {
objs[i].eventHandler.handleEvent();
}
}

}

class Object {
int id;
EventHandler eventHandler;
Object(int id) {this.id = id;}
}

interface EventHandler {
void handleEvent();
}
JavaScript:
var objs = [{id: 0}, {id: 1}];

for (var i = 0; i < objs.length; i++) {
objs[i].eventHandler = (function() {
var t = objs[i];
return function() {
alert("Event Handled: Object " + t.id);
};
})();
}

for (var i = 0; i < objs.length; i++) {
objs[i].eventHandler();
}
C++:







































Java:




























JavaScript:













