自定义对象的骨干结构

时间:2013-03-22 04:55:12

标签: javascript backbone.js

看一些主干示例,我看到一些像这样的简单模型:

var Vehicle = Backbone.Model.extend(
{
   summary: function () {
   return 'Vehicles move';
   }

});

Vehicle = (function () {
return Backbone.Model.extend({
   defaults: {

   },

   initialize: {

   }
});

})();

编辑:(澄清) 我想知道是否有人可以解释定义骨干对象的两种方式之间的差异以及更常规的方法。我知道他们内部没有相同的方法,但我更感兴趣的是在第一个方法中,他们扩展了主干模型,第二个方法是将它包装在一个闭包中。我不确定我是否真正了解每个人的情况,以及何时使用哪种模式。提前谢谢!

2 个答案:

答案 0 :(得分:1)

我认为第一种形式更为传统,特别是因为我甚至根本没有在主Backbone.js网站上看到第二种形式。

要了解它们是如何做同样的事情,首先要注意Backbone.Model.extend()是一个也返回一个函数的函数:

> Backbone.Model.extend()
  function () { return parent.apply(this, arguments); }

因此变量Vehicle最终被设置为一个函数,它是一个模型构造函数方法,无论你看它是什么。我会认为第二种形式更间接且不必要地复杂:它将Vehicle设置为调用函数的结果,该函数本身只返回Backbone.Model.extend(),所以它只是一种更复杂的说法同样的事情。

答案 1 :(得分:1)

如果模型的所有属性都很容易定义,建议使用模式1。但是,如果任何属性实现起来很复杂,那么需要一个“私有”辅助函数,您不希望在模型或全局对象中公开它,最好利用闭包来隐藏它。这就是模式2.

一个例子:

Vehicle = (function () {

function helper1() {} //don't want to expose it
function helper2() {}

return Backbone.Model.extend({
   defaults: {

   },

   initialize: {

   }

   summary: function() {
      helper1();
      helper1();
   }

});

})();