打字稿如何编译 类 和普通匿名函数之间的实际区别是什么?
What's the practical difference between how typescript compiles classes and a normal anonymous function?
在 TypeScript 中,假设存在一个简单的 class,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;
}());
一个包含表达式的变量,该表达式包含一个匿名函数。此匿名函数包含 returns 一个名称与变量名称匹配的命名函数。据我所知,匿名函数称为内联函数。当它被调用时,命名函数被返回,然后在它被返回到表达式括号中时被评估。
为什么要这样做?我敢肯定一定有原因,但我仍然觉得我无法真正理解这里发生的事情。为什么不直接使用 name = anonymous 构造器呢?嵌套函数给我们带来了什么好处?
Why do this?
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));
注意引用父 class 的参数 _super
。
但是这种转译很快就会过时。如果我们想手写 JavaScript,对于现代 JS 引擎,我们可以这样写:
class Person3 {
constructor(name) {
this.name = name
}
}
在 TypeScript 中,假设存在一个简单的 class,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;
}());
一个包含表达式的变量,该表达式包含一个匿名函数。此匿名函数包含 returns 一个名称与变量名称匹配的命名函数。据我所知,匿名函数称为内联函数。当它被调用时,命名函数被返回,然后在它被返回到表达式括号中时被评估。
为什么要这样做?我敢肯定一定有原因,但我仍然觉得我无法真正理解这里发生的事情。为什么不直接使用 name = anonymous 构造器呢?嵌套函数给我们带来了什么好处?
Why do this?
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));
注意引用父 class 的参数 _super
。
但是这种转译很快就会过时。如果我们想手写 JavaScript,对于现代 JS 引擎,我们可以这样写:
class Person3 {
constructor(name) {
this.name = name
}
}