Repository navigation
Expand file tree
/
Copy pathpersonExample.js
More file actions
80 lines (70 loc) · 1.83 KB
/
Copy pathpersonExample.js
File metadata and controls
80 lines (70 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
var copPromise = require("./main");
cop.create('AddressLayer');
cop.create('EmploymentLayer');
var db = {
values: {
personName: "Hans Peter",
personAddress: "Am Kiez 49, 123 Berlin",
employerName: "Doener AG",
employerAddress: "An der Ecke, 124 Berlin"
},
get: function (key) {
return copPromise.delay(db.values[key], 500);
}
};
Object.subclass('Person', {
initialize: function(newEmployer) {
this.employer = newEmployer;
},
print: function() {
return db.get("personName").then(function (name) {
return "Name: " + name;
});
},
AddressLayer$print: function() {
return copPromise.all([cop.proceed(), db.get("personAddress")]).then(function (result) {
var previousValue = result[0];
var address = result[1];
return previousValue + "; Address: " + address;
});
},
EmploymentLayer$print: function() {
return copPromise.all([cop.proceed(), this.employer.print()]).then(function (result) {
var previousValue = result[0];
var employer = result[1];
return previousValue + "; [Employer] " + employer;
});
}
});
Object.subclass('Employer', {
initialize: function() {
},
print: function() {
return db.get("employerName").then(function (name) {
return "Name: " + name;
});
},
});
AddressLayer.refineClass(Employer, {
print: function() {
return copPromise.all([cop.proceed(), db.get("employerAddress")]).then(function (result) {
var previousValue = result[0];
var address = result[1];
return previousValue + "; Address: " + address;
});
}
});
employer = new Employer();
person = new Person(employer);
console.time("printPerson");
withLayers([AddressLayer], function () {
person.print().then(function (val) {
console.timeEnd("printPerson");
console.log(val);
});
});
withLayers([AddressLayer, EmploymentLayer], function () {
person.print().then(function (val) {
console.log(val);
});
});