我可以在TypeScript中扩展函数吗?

时间:2016-04-23 09:26:21

标签: javascript function scope typescript closures

我想创建一个包含单个值的超级容器类。

let a = new Container(42);

我希望得到像这样的价值

a(); // 42

并设置像这样的值

a(43);

有没有办法在TypeScript中实现这个目的?

2 个答案:

答案 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