Mår*_*röm 3 javascript typescript
以下TypeScript:
class A {
member = "value";
}
Run Code Online (Sandbox Code Playgroud)
...编译为:
var A = (function () {
function A() {
this.member = "value";
}
return A;
})();
Run Code Online (Sandbox Code Playgroud)
我想实现以下目标:
var A = (function () {
function A() {
}
A.prototype.member = "value";
return A;
})();
Run Code Online (Sandbox Code Playgroud)
这样做的原因是我相信后一种结构可能更有效,因为(1)this.member = "value"每次创建新实例时都不必执行赋值语句,(2)实例内存有效负载会更小.
免责声明:我没有基准标记这两个结构,所以我真的不知道是否是这种情况.
所以我的问题是:是否可以使用类型脚本声明"原型成员"?.
如果有人可以解释为什么类型脚本是这样设计的,我也很高兴?.(参见规范中的§8.4.1)
我理解以这种方式声明可变成员是愚蠢的,但是不可变原语的声明,比如string和number,应该可以在原型上设置,对吧?
可能的解决方法是:
class A {
member: string;
}
A.prototype.member = "value";
Run Code Online (Sandbox Code Playgroud)
但是,这对私人会员不起作用:
class A {
private member: string;
}
A.prototype.member = "value"; // error TS2107: 'A.member' is inaccessible.
Run Code Online (Sandbox Code Playgroud)
是否可以使用类型脚本声明"原型成员"?
目前没有语言不允许这样做.
解决方法
当编译器不满意时...断言:
class A {
private member: string;
}
(<any>A.prototype).member = "value"; // suppressed
Run Code Online (Sandbox Code Playgroud)
为什么类型脚本是这样设计的
很简单,因为它是不地道有非功能上prototype.
(1)每次创建新实例时都不必执行赋值this.member ="value"语句,并且(2)实例内存有效负载会更小.
但是查找肯定会慢一些.这是一个示例测试:http://jsperf.com/prototype-vs-this-access
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |