编码方法:将方法存储为对象属性

时间:2014-02-20 20:02:05

标签: javascript json tiles

在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。

谢谢!

3 个答案:

答案 0 :(得分:1)

将函数存储在对象中的主要优点是降低了名称冲突的几率。您的第一个示例使用scene()renderLayer()污染全局命名空间,如果您拥有包含其他包和模块的中等代码库,则可能存在危险。

在第二个片段中,scene在匿名函数中定义。这有两个好处:

  • 它使scene对象无法访问函数外部的代码。 Information hiding已得到执行。
  • 声明的评估将推迟到页面完全加载所有内容(包括图像,脚本文件,CSS文件等)。这保证了所有资源都可用。

答案 1 :(得分:1)

首先,将所有代码包含在匿名函数中是更好的做法,因为您没有使用函数污染命名空间。另一方面,第二个示例更有条理,因为您确切知道哪些数据/函数属于一起。

然而,这不是OOP,因为你没有创建Scene的新实例。

答案 2 :(得分:1)

前一个示例是IIFE,而后一个示例只是包含应该在给定JS对象中属于一起的所有代码(方法和对象状态)。