有人可以向我解释这个“构造函数”定义的优点是什么:
var Tree = (function () {
function Tree(name) {
this.name = name;
}
return Tree;
})();
代替
var Tree = function(name) {
this.name = name;
};
第一个变体由 TypeScript 编译器生成。
有人可以向我解释这个“构造函数”定义的优点是什么:
var Tree = (function () {
function Tree(name) {
this.name = name;
}
return Tree;
})();
代替
var Tree = function(name) {
this.name = name;
};
第一个变体由 TypeScript 编译器生成。
在 TypeScript 的情况下,还有额外的闭包用于捕获基类
class Animal {
public run() {
console.log('running!');
}
}
class Giraffe extends Animal {
public run() {
super.run();
console.log('... and looking awkward');
}
}
发射:
var Animal = (function () {
function Animal() {
}
Animal.prototype.run = function () {
console.log('running!');
};
return Animal;
})();
var Giraffe = (function (_super) {
__extends(Giraffe, _super);
function Giraffe() {
_super.apply(this, arguments);
}
Giraffe.prototype.run = function () {
_super.prototype.run.call(this);
console.log('... and looking awkward');
};
return Giraffe;
})(Animal);
注意通过传递给立即调用函数_super.prototype
的参数(此处)引用基类的用法。Animal
如果没有额外的闭包,就无法在不污染全局命名空间的情况下保存该值。
在这个具体的例子中,没有区别。如果您想在范围内保留一些变量,可能会有所不同:
var Tree = (function () {
var greeting = "Hello ";
function Tree(name) {
this.firstname = greeting + name;
}
return Tree;
})();
此外,在这种情况下,无法修改greeting
变量(实际上,它是私有的)。
该函数将被命名,这将在堆栈跟踪和调试工具中产生更有用的结果。
但是,您可以通过以下方式实现相同的效果:
function Tree(name) {
this.name = name;
}
如果您简化了代码,那么您可能已经删除了可能创建类似于 Class 变量(在函数的所有实例之间共享的一段数据)的闭包的使用。