静态属性创建优化
TypeScript - static property creation optimization
我是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的setter。红色,它没有任何作用,所以这个表述没有效果。你可以在getter中加入一个alert()
,然后自己调用它几次。
如果您查看为这一部分生成的JavaScript,您将看到getter是通过Object.defineProperty创建的,这是一个有趣的东西。您可以自己调用Object.defineProperty来重新定义getter的动作,但是当private static red : Color = new Color(255,0,0);
工作得很好时,这似乎要做很多工作。
如果你想让它被缓存,你可以这样做:
class Color {
public R: number;
public G: number;
public B: number;
public A: number;
private static _red : Color = new Color(255,0,0);
static get Red(): Color {
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时,都会调用实现它的函数。Red
实现不会完成任何形式的缓存。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- JavaScript代码优化-创建可重用类
- 如何优化要在 javascript 字符串中使用的长 html 代码的创建
- requireJS优化器创建不起作用的代码
- Requirejs 优化器 - 为站点的各个部分创建脚本的缩小分组
- 如何通过数字开关优化集合创建
- 简单级别,在DOM中选择元素,优化,创建方法函数
- 如何优化作为RequireJS模块创建的JavaScript文件子集
- 优化函数以创建垂直时间轴
- 优化嵌套循环,使用jQuery创建HTML元素
- 静态属性创建优化
- 优化的纯JavaScript意味着迭代静态HTML表,根据其行/列创建对象数组
- 如何优化jquery脚本(表创建N行X 56列)