javascript - TypeScript - 静态属性创建优化

标签 javascript typescript

我是 JavaScript 的新手,因为我来自强类型语言,所以我选择了 TypeScript。

我想知道这段代码中 Red getter 中的变量 red 发生了什么。它会在每次调用时重新创建(例如在 Green getter 中)还是创建一次并每次都使用?哪个最好?

class Color {
    public R: number;
    public G: number;
    public B: number;
    public A: number;

    static get Red(): Color {
        var red = new Color(255, 0, 0);
        Color.Red = function() { return red; }
        return red;
    }

    static get Green(): Color {
        return new Color(0, 255, 0);
    }

    constructor(red: number, green: number, blue: number, alpha: number = 255) {
        this.R = red;
        this.G = green;
        this.B = blue;
        this.A = alpha;
    }
}

最佳答案

其他答案完全正确,但我认为他们没有提到一个微妙的问题。因为 Red 被定义为一个 getter,所以它也得到一个什么都不做的自动空 setter。所以当你调用 Color.Red = function() { return red; } 您将该函数传递给 Color.Red 的 setter,它什么也不做,因此该语句无效。您可以将一个 alert() 放入 getter 中并调用它几次以亲自查看。

如果您查看为本文生成的 JavaScript,您会发现 getter 是通过 Object.defineProperty 创建的,这是一个有趣的野兽。您可以自己调用 Object.defineProperty 来重新定义 getter 的操作,但是当 private static red : Color = new Color(255,0,0); 时,这似乎需要大量工作工作得很好。

至于哪个最好,这是一个权衡的问题,什么对你来说更重要。总是返回一个新的对象会占用更多的内存,但可以避免有人修改 Color.Green 并导致大量有趣的错误被追踪的风险。

关于javascript - TypeScript - 静态属性创建优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15937163/

相关文章:

javascript - Ext.msg.show() 的定位 - Extjs

javascript - 涉及泛型对象的泛型属性的赋值无法在泛型函数中正确进行类型检查

angular - 数字计数动画 Angular 2

javascript - jstree 3.0.0 卡在加载 json 数据上

javascript - 从所有检查值创建字符串 jQuery

javascript - 使用 Angular 6 插入数据时更新数据表

typescript - 为什么 Typescript 允许实现抽象类?

typescript - 高阶函数中的通用类型

Javascript 此引用可内联使用,但并非没有内联引用

javascript - 创建一个 javascript "hasValue"util 方法