forked from HowProgrammingWorks/ReactiveProgramming
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2-set-get.js
More file actions
46 lines (41 loc) · 864 Bytes
/
2-set-get.js
File metadata and controls
46 lines (41 loc) · 864 Bytes
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
'use strict';
const { PI, sqrt } = Math;
const square = x => x * x;
// Reactive Truncated cone
class Cone {
constructor(r1, r2, h) {
this.cone = { r1, r2, h };
this.calculate();
}
calculate() {
const { r1, r2, h } = this.cone;
const sr1 = square(r1);
const sr2 = square(r2);
const l = sqrt(square(h) + square(r2 - r1));
this.cone.v = PI * h * (sr1 + r1 * r2 + sr2) / 3;
this.cone.s = PI * (sr1 + sr2 + l * (r1 + r2));
}
set r1(x) {
this.cone.r1 = x;
this.calculate();
}
set r2(x) {
this.cone.r2 = x;
this.calculate();
}
set h(x) {
this.cone.h = x;
this.calculate();
}
get v() {
return this.cone.v;
}
get s() {
return this.cone.s;
}
}
// Usage
const cone = new Cone(10, 15, 7);
console.dir({ v: cone.v, s: cone.s });
cone.h = 8;
console.dir({ v: cone.v, s: cone.s });