在TypeScript中,假设存在一个简单的类Person3。
class Person3 {
name: string
constructor(public name: string) {
this.name = name
}
}
如果我们手工编写JavaScript,我们可能会写一个这样的函数:
var Person3 = function(name){
this.name = name;
}
甚至可以使用纯函数语法:
function Person3(name){
this.name = name;
}
但TypeScript编译为:
var Person3 = (function(){
function Person3(name){
this.name = name;
}
return Person3;
}());
一个变量,它包含一个包含匿名函数的表达式。此匿名函数包含并返回名称与变量名称匹配的命名函数。据我所知,匿名函数被称为内联。调用它时,返回指定的函数,然后在返回到表达式括号中时进行求值。
为什么这样?我确信一定有理由,但我仍然觉得我无法真正理解这里发生的事情。为什么不使用name = anonymous constructer?嵌套函数给我们带来了什么好处?
答案 0 :(得分:2)
为什么这样?
IIFE适用于继承:
class A {
}
class B extends A {
}
...被转换为(使用ES3 / 5目标):
var __extends = // ...
var A = (function () {
function A() {
}
return A;
}());
var B = (function (_super) {
__extends(B, _super);
function B() {
return _super.apply(this, arguments) || this;
}
return B;
}(A));
注意引用父类的参数_super
。
但这种翻译很快就会过时。如果我们想手工编写JavaScript,对于现代JS引擎,我们可以写:
class Person3 {
constructor(name) {
this.name = name
}
}