Javascript 带主干的类构造函数 任务

Javascript 带主干的类构造函数 任务,javascript,backbone.js,Javascript,Backbone.js,可以将命名参数传递给新的bb备份对象 例子 问题 是否可以不修改库源代码?您可以将JavaScript对象作为参数传递到构造函数中,请查看: 如果您检查源代码,您将看到模型调用initialize,如下所示: Backbone.Model = function(attributes, options) { // ... this.initialize(attributes, options); }; this.initialize.apply(this, arguments); va

可以将命名参数传递给新的bb备份对象

例子 问题
是否可以不修改库源代码?

您可以将JavaScript对象作为参数传递到构造函数中,请查看:


如果您检查源代码,您将看到模型调用
initialize
,如下所示:

Backbone.Model = function(attributes, options) {
  // ...
  this.initialize(attributes, options);
};
this.initialize.apply(this, arguments);
var View = Backbone.View.extend({
    initialize: function(a, b, c, d) {
        // ...
    }
});
new View('where', 'is', 'pancakes', 'house?');
但是收集、路由器和视图是这样称呼的:

Backbone.Model = function(attributes, options) {
  // ...
  this.initialize(attributes, options);
};
this.initialize.apply(this, arguments);
var View = Backbone.View.extend({
    initialize: function(a, b, c, d) {
        // ...
    }
});
new View('where', 'is', 'pancakes', 'house?');
我们都知道,这是不是:

使用给定的
this
值和作为数组提供的
参数调用函数

是:

与传递给函数的参数相对应的类似数组的对象

因此,对于型号,您必须遵守标准,但对于其他型号,您可以执行以下操作:

Backbone.Model = function(attributes, options) {
  // ...
  this.initialize(attributes, options);
};
this.initialize.apply(this, arguments);
var View = Backbone.View.extend({
    initialize: function(a, b, c, d) {
        // ...
    }
});
new View('where', 'is', 'pancakes', 'house?');
演示:

请注意,这样做违反了文档和接口,因此,如果使用这种未文档化的行为会导致新的、有趣的错误,或者在升级后神秘地中断,请不要感到惊讶。我建议您坚持使用文档化的接口,如果它真的让您如此困扰,请编写构造函数:

function make_thing(a, b c) {
    return new Thing({
        a: a,
        b: b,
        c: c
    });
}

然后转到更高效的方面。

通常的
选项
对象有什么问题吗?这是品味的问题,我不喜欢在另一个对象中传递参数。您在这里使用的“初始化”是模型、集合或视图,而不应该在您的问题中提到这一点。最好告诉我们你到目前为止都做了些什么。顺便问一下,内置解决方案有什么问题?