阅读时Hashrocket's blog在tilemapping上,我了解了一种组织代码的新方法。
我习惯的方式是:
(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 = {
是类,它的属性是类中的方法/属性。
谢谢!
最佳答案
将函数存储在对象中的主要优点是减少名称冲突的可能性。您的第一个示例使用 scene()
和 renderLayer()
污染了全局命名空间,如果您有包含其他包和模块的中等代码库,这可能会带来危险。
在第二个片段中,scene
在匿名函数内定义。这有两个好处:
- 它使得函数外部的代码无法访问
scene
对象。 Information hiding已强制执行。 - 声明的评估会延迟到页面完全加载所有内容(包括图像、脚本文件、CSS 文件等)。这保证了所有资源都可用。
关于javascript - 编码方式: storing methods as object properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21918268/