在tilemapping上阅读Hashrocket's blog时,我了解了一种组织代码的新方法。
我习惯的方式是:
(function start () {
scene();
})();
function scene() {
renderLayer();
}
function renderLayer() {
var x
var y
}
等等......
Hashrocket在函数包装器中创建一个对象,并将函数和变量作为属性添加到对象中:
$(function() {
var scene = {
layers: [],
renderLayer: function(layer) { },
renderLayers: function(layers) { },
loadTileset: function(json) { },
load: function(name) { }
}
scene.load(something);
});
这种编码方式的名称是什么,有什么区别/好处?它似乎与OOP类似,因为scene = {
将是类,它的属性将是类中的方法/ attr。
谢谢!
答案 0 :(得分:1)
将函数存储在对象中的主要优点是降低了名称冲突的几率。您的第一个示例使用scene()
和renderLayer()
污染全局命名空间,如果您拥有包含其他包和模块的中等代码库,则可能存在危险。
在第二个片段中,scene
在匿名函数中定义。这有两个好处:
scene
对象无法访问函数外部的代码。 Information hiding已得到执行。答案 1 :(得分:1)
首先,将所有代码包含在匿名函数中是更好的做法,因为您没有使用函数污染命名空间。另一方面,第二个示例更有条理,因为您确切知道哪些数据/函数属于一起。
然而,这不是OOP,因为你没有创建Scene的新实例。
答案 2 :(得分:1)
前一个示例是IIFE,而后一个示例只是包含应该在给定JS对象中属于一起的所有代码(方法和对象状态)。