Backbone Model默认 - todos.js示例中不必要的代码?

Bru*_*ris 4 javascript backbone.js

在backbone.js ToDos示例中,initializeToDo构造函数的方法将title属性设置为默认标题.

这不是不必要的吗?我认为默认值是他们自动分配?或者我错过了什么?

var Todo = Backbone.Model.extend({ 

    // Default attributes for the todo item.
    defaults: function() {
      return {
        title: "empty todo...",
        order: Todos.nextOrder(),
        done: false
      };
    },

    // Ensure that each todo created has `title`.
    initialize: function() {
      if (!this.get("title")) {
        this.set({"title": this.defaults().title});
      }
    },

    ///...

);}
Run Code Online (Sandbox Code Playgroud)

nik*_*shr 5

仅当没有相应的属性传递给构造函数时,才会应用默认值.在这种情况下,可能确保使用空字符串作为标题创建的项目显示其中的内容.相比

var Todo1 = Backbone.Model.extend({

    defaults: function() {
      return {
        title: "empty todo...",
        done: false
      };
    },

    initialize: function() {
      if (!this.get("title")) {
        this.set({"title": this.defaults().title});
      }
    }
});
var t1 = new Todo1({
    title: ""
});
Run Code Online (Sandbox Code Playgroud)

var Todo2 = Backbone.Model.extend({

    // Default attributes for the todo item.
    defaults: function() {
      return {
        title: "empty todo...",
        done: false
      };
    }
});

var t2 = new Todo2({
    title: ""
});
Run Code Online (Sandbox Code Playgroud)

t1.get('title')空待办事项...t2.get('title')将是一个空字符串.不向两个构造函数传递任何参数确实会使用默认值.

还有一个小提琴http://jsfiddle.net/nikoshr/CeEDg/