我想创建一个包含单个值的超级容器类。
let a = new Container(42);
我希望得到像这样的价值
a(); // 42
并设置像这样的值
a(43);
有没有办法在TypeScript中实现这个目的?
答案 0 :(得分:2)
JavaScript / TypeScript中不支持运算符重载。 如果尝试调用类,则无法定义调用的函数(构造函数除外)。
答案 1 :(得分:2)
有没有办法在TypeScript中实现这个目的?
为什么不呢。因为它可以在纯JavaScript中完成,它也很容易在TypeScript中实现。几乎总是使用函数, scope 是我们方法的关键字。
然后构造函数当然被误用作封闭而不创建会响应例如Container
来自typeof
运营商。这样的工厂函数只返回另一个函数,然后用作构造函数的初始值的getter / setter。
TypeScript示例...
class Container {
constructor(storageValue: any) {
return (function (value: any) {
if (arguments.length !== 0) {
storageValue = value;
}
return storageValue;
});
}
}
...用简单的JavaScript ......
var Container = (function ContainerClass () {
var Constructor = (function Container (storageValue) {
return (function (value) {
if (arguments.length !== 0) {
storageValue = value;
}
return storageValue;
});
});
return Constructor;
}());
var a = new Container(24);
console.log("a() : ", a()); // 24
console.log("a(4) : ", a(4)); // 4
console.log("a() : ", a()); // 4
var b = new Container(72);
console.log("b() : ", b()); // 72
console.log("b(5) : ", b(5)); // 5
console.log("b() : ", b()); // 5
console.log("a() : ", a()); // 4