2017-02-23 38 views
1

在TypeScript中,假设存在一个简单的类Person3。 typescript如何编译类和普通的匿名函数之间的实际区别是什么?

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; 
} 

但打字稿汇编为:

var Person3 = (function(){ 
    function Person3(name){ 
    this.name = name; 
    } 
    return Person3; 
}()); 

一个变量,其中包含保存匿名函数的表达式。这个匿名函数包含并返回一个名称与变量名称相匹配的命名函数。据我所知,匿名函数被内联调用。当它被调用时,指定的函数将返回,然后在返回到表达式括号中进行评估。

为什么这样做?我确信必须有一个原因,但我仍然觉得我很难真正理解这里发生的事情。为什么不使用name =匿名构造函数?嵌套函数给我们带来了什么好处?

回答

2

为什么这样做?

的IIFE是用于继承的情况下:

class A { 
} 
class B extends A { 
} 

...被transpiled至(与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 
    } 
} 
相关问题