这三段代码效果相同,比较一下还有点意思:
C++:
Java:
JavaScript:
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;
}
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();
}
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();
}
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();
}