我对您在JavaScript中创建模块的方式有一些疑问。这是我发现的语法:
var Westeros;
(function (Westeros) {
(function (Structures) {
var Castle = (function () {
function Castle(name) {
this.name = name;
}
Castle.prototype.build = function () {
console.log("Castle " + this.name)
};
return Castle;
})();
Structures.Castle = Castle;
})(Westeros.Structures || (Westeros.Structures = {}));
var Structures = Westeros.Structures;
})(Westeros || (Westeros = {}));
var winterfell = new Westeros.Structures.Castle("Winterfell");
winterfell.build();
我带了this code from Mastering Javascript Design Patterns。但是,我试图找到你需要这条线的答案:
var Structures = Westeros.Structures;
如果省略此行,代码将按预期工作。这有什么解释吗?也许去"揭示"班级?
谢谢!
答案 0 :(得分:1)
这段代码令人恐惧。这是一个没有所有无意义闭包的确实完成某些事情的示例:
function Castle(name) {
this.name = name;
}
Castle.prototype.build = function() {
console.log("Castle " + this.name)
};
var Westeros = {
Structures: {}
};
Westeros.Structures.Castle = Castle;
var winterfell = new Westeros.Structures.Castle("Winterfell");
winterfell.build();
在ES5中定义“类”时,您所要做的就是声明一个带有一些参数的函数,并放置您想要的任何初始化代码。方法被添加到该函数的.prototype
属性中,并且通过使用new
关键字调用其构造函数来创建使用该类的新对象。
至于var Structures = Westeros.Structures;
,它没有任何意义。如果您要保留原始代码示例,删除它不会改变任何内容。实际上,它甚至不能被更多的代码使用,因为它在闭包内声明,并且不能在该范围之外访问。