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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
//// [asyncMethodWithSuper_es6.ts]
class A {
x() {
}
y() {
}
}
class B extends A {
// async method with only call/get on 'super' does not require a binding
async simple() {
// call with property access
super.x();
// call additional property.
super.y();
// call with element access
super["x"]();
// property access (read)
const a = super.x;
// element access (read)
const b = super["x"];
}
// async method with assignment/destructuring on 'super' requires a binding
async advanced() {
const f = () => {};
// call with property access
super.x();
// call with element access
super["x"]();
// property access (read)
const a = super.x;
// element access (read)
const b = super["x"];
// property access (assign)
super.x = f;
// element access (assign)
super["x"] = f;
// destructuring assign with property access
({ f: super.x } = { f });
// destructuring assign with element access
({ f: super["x"] } = { f });
}
}
//// [asyncMethodWithSuper_es6.js]
class A {
x() {
}
y() {
}
}
class B extends A {
// async method with only call/get on 'super' does not require a binding
simple() {
const _superIndex = name => super[name];
const _super = Object.create(null, {
x: { get: () => super.x },
y: { get: () => super.y }
});
return __awaiter(this, void 0, void 0, function* () {
// call with property access
_super.x.call(this);
// call additional property.
_super.y.call(this);
// call with element access
_superIndex("x").call(this);
// property access (read)
const a = _super.x;
// element access (read)
const b = _superIndex("x");
});
}
// async method with assignment/destructuring on 'super' requires a binding
advanced() {
const _superIndex = (function (geti, seti) {
const cache = Object.create(null);
return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });
})(name => super[name], (name, value) => super[name] = value);
const _super = Object.create(null, {
x: { get: () => super.x, set: v => super.x = v }
});
return __awaiter(this, void 0, void 0, function* () {
const f = () => { };
// call with property access
_super.x.call(this);
// call with element access
_superIndex("x").value.call(this);
// property access (read)
const a = _super.x;
// element access (read)
const b = _superIndex("x").value;
// property access (assign)
_super.x = f;
// element access (assign)
_superIndex("x").value = f;
// destructuring assign with property access
({ f: _super.x } = { f });
// destructuring assign with element access
({ f: _superIndex("x").value } = { f });
});
}
}
|