我是 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/