EOG*_*EOG 2 javascript typescript
我是JavaScript的新手,因为我来自强类型语言,所以我选择了TypeScript.
我想知道发生了什么变量red在Red getter这个代码.它会在每次调用时重新创建(如in 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;
}
}
Run Code Online (Sandbox Code Playgroud)
其他答案是完全正确的,但我认为有一个微妙的问题,他们没有提到.因为Red被定义为getter,所以它也会获得一个无效的自动空setter.因此,当您调用时Color.Red = function() { return red; },将该函数传递给Color.Red的setter,它不执行任何操作,因此该语句无效.你可以alert()把它打入吸气器并调用它几次以便自己看看.
如果你看看为这篇文章生成的JavaScript,你会看到getter是通过Object.defineProperty创建的,这是一个有趣的野兽.您可以自己调用Object.defineProperty来重新定义getter的动作,但是当private static red : Color = new Color(255,0,0);完美地工作时,这似乎很多工作.
至于哪个是最好的,这是一个权衡问题,对你来说更重要的是什么.总是返回一个新的对象会耗费更多的内存,但是避免了某人修改Color.Green并导致一个有趣的bug被追踪的风险.
| 归档时间: |
|
| 查看次数: |
4418 次 |
| 最近记录: |