_.extend 没有正确地将元素浅层复制到目的地

_.extend doesn't shallow copy elements to destination properly

我刚开始编写一个 Backbone 库,它是这样的,

(function() {
    var root = this;

    if(root && !root.Backbone) {
        console.log('BackboneJS does not exist!.');
    } else {
        Backbone = root.Backbone;
    }

    var Form = Backbone.View.extend({
        events: {
            'submit': function(event) {
                this.trigger('submit', event);
            }
        },
        initialize: function(options) {
            var self = this;
            var options = this.options = _.extend(options, {
                submitButton: false
            });
        }
    });
    Backbone.Form = Form;
})();

我正在通过 jQuery(在我的 index.html 中)像这样调用它,

$(document).ready(function(){
  var myForm = new Backbone.Form({
  options: {
    hasTopButtons : true,
    hasEdit: false,
    hasPrint: true
  }
});

但是,当我使用 _.extend 函数将其他键浅复制到 options 时,在我看来似乎没有将新键包含到现有的 options 数组中,相反,它会像这样在 options 数组之外创建一个新数组,

而不是下面的结构。

谁能帮我找出问题所在?

您调用的函数不正确。你想要:

$(document).ready(function(){
  var myForm = new Backbone.Form({
    hasTopButtons : true,
    hasEdit: false,
    hasPrint: true
  });
});

您的代码显式传递了一个对象,该对象具有一个名为 "options" 的 属性。

此外,在您的 "initialize" 函数中,有一个虚假的 var 声明:

        var options = this.options = _.extend(options, {
            submitButton: false
        });

应该可能

        this.options = _.extend({}, options, {
            submitButton: false
        });

_.extend 函数修改第一个对象,您可能不希望像那样弄乱客户端对象。因此,您可以传入一个新的空对象,_.extend() 会将所有客户端属性浅复制到其中。