Javascript _.extend不';t将元素正确复制到目标

Javascript _.extend不';t将元素正确复制到目标,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我刚开始写一个主干库,它是这样的 (function() { var root = this; if(root && !root.Backbone) { console.log('BackboneJS does not exist!.'); } else { Backbone = root.Backbone; } var Form = Backbone.View.extend({ even

我刚开始写一个主干库,它是这样的

(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;
})();
$(document).ready(function(){
  var myForm = new Backbone.Form({
  options: {
    hasTopButtons : true,
    hasEdit: false,
    hasPrint: true
  }
});
我通过jQuery(在我的index.html中)这样调用它

(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;
})();
$(document).ready(function(){
  var myForm = new Backbone.Form({
  options: {
    hasTopButtons : true,
    hasEdit: false,
    hasPrint: true
  }
});
但是,当我使用
.extend
函数将附加键浅拷贝到
选项
时,在我看来并没有将新键包括到现有的
选项
数组中,而是在
选项
数组之外创建一个新键,如下所示

(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;
})();
$(document).ready(function(){
  var myForm = new Backbone.Form({
  options: {
    hasTopButtons : true,
    hasEdit: false,
    hasPrint: true
  }
});

而不是下面的结构


有人能帮我找出这里出了什么问题吗?

您错误地调用了函数。你想要:

$(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
        });
应该是这样的


extend函数修改第一个对象,您可能不想这样处理客户机对象。因此,您可以传入一个新的空对象,而
\uu0.extend()
将浅层复制所有客户端属性到该对象中。

您错误地调用了该函数。你想要:

$(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
        });
应该是这样的


extend函数修改第一个对象,您可能不想这样处理客户机对象。因此,您可以传入一个新的空对象,而
\uu0.extend()
将浅层复制所有客户端属性到其中。

My bad!。你在@Pointy!上的位置是正确的。:-)我的错!。你在@Pointy!上的位置是正确的。:-)