forked from ramana4029/es6-features
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclasses.js
More file actions
100 lines (67 loc) · 1.51 KB
/
classes.js
File metadata and controls
100 lines (67 loc) · 1.51 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
81
82
83
84
85
86
87
88
89
90
91
92
/*
Classes are in fact "special functions", and just as you can define function expressions
and function declarations, the class syntax has two components:
class expressions and class declarations.
*/
/**
// unnamed
var Element = class {
constructor(elementKey, hub) {
this.elementKey = elementKey;
this.hub = hub;
}
};
// named ... The name given to a named class expression is local to the class's body.
var Element = class Element {
constructor(elementKey, hub) {
this.elementKey = elementKey;
this.hub = hub;
}
};
**/
class Element {
constructor(elementKey, hub) {
this.elementKey = elementKey;
this.hub = hub;
}
get key() {
return this.elementKey;
}
details() {
return {
"key": this.elementKey,
"hub" : hub
};
}
static hydrate(a, name) {
return {
"key": a.elementKey,
"hub" : a.hub,
"name" : name
};
}
}
const ele = new Element('sfdc', 'crm');
console.log(ele.key);
console.log(ele);
console.log(Element.hydrate(ele, 'Salesforce'));
/*
//Sub classing with extends
class Hub {
}
class Element extends Hub {
}
*/
/*
//Mix-ins
//Abstract subclasses or mix-ins are templates for classes
class can only have a single superclass, so multiple inheritance from tooling classes is not possible.
*/
var calculatorMixin = Base => class extends Base {
calc() { }
};
var randomizerMixin = Base => class extends Base {
randomize() { }
};
class Foo { }
class Bar extends calculatorMixin(randomizerMixin(Foo)) { }