Javascript 向arguments对象添加值

Javascript 向arguments对象添加值,javascript,backbone.js,arguments,Javascript,Backbone.js,Arguments,我在JavaScript方法中向参数objekt添加值时遇到问题 我正在尝试向主干.Model.fetch()方法添加一个额外的成功回调,我的模型如下所示: models.Settings = Backbone.Model.extend({ url: "path/to/settings.json", dataLoaded: function() { this.set({ data: new collections.Data( this.g

我在JavaScript方法中向参数objekt添加值时遇到问题

我正在尝试向
主干.Model.fetch()方法添加一个额外的成功回调,我的模型如下所示:

models.Settings = Backbone.Model.extend({
    url: "path/to/settings.json",

    dataLoaded: function() {
        this.set({
            data: new collections.Data( this.get("data") )
        });
    },

    fetch: function() {
        var
            cb;

        if(!arguments.length) arguments[0] = {};

        if(arguments[0].hasOwnProperty('success')) {
            cb = arguments[0].success;
        }

        arguments[0].success = function() {
            this.dataLoaded();
            if(typeof cb === 'function') cb.apply(undefined, arguments);
        }.bind(this);

        models.Settings.__super__.fetch.apply(this, arguments);
    }
});
只要将值(任意值)传递给
fetch()
,代码就可以正常工作。当arguments对象最初为空时会出现问题。我可以设置
参数[0]
成功
值。但回调永远不会运行


我缺少什么?

参数属性是一个对象,而不是数组,这意味着当设置参数[0]={},然后看起来像()

但是,
models.Settings.\uuuuu super\uuuu.fetch.apply
需要一个数组(或至少一个与内容匹配的
length
属性),但没有得到它

解决
  • 最粗俗的是,设置
    长度
    属性:

    if(!arguments.length) {
        arguments[0] = {};
        arguments.length = 1;
    }
    

  • 稍微好一点,用数组初始化
    参数

    if(!arguments.length) {
        arguments = [{}];
    }
    

  • 重写整个过程以利用方法的签名
    model.fetch([options])
    并使用


  • 对,我知道它是一个对象,但它看起来像一个数组。我想我是糊涂了,以为它会像数组一样运行。我已经重写了方法,使其看起来像选项3,谢谢。
    if(!arguments.length) {
        arguments = [{}];
    }
    
    fetch: function(opts) {
        var cb;
        opts = opts || {};
    
        if (opts.hasOwnProperty('success')) {
            cb = opts.success;
        }
    
        opts.success = function() {
            this.dataLoaded();
            if(typeof cb === 'function') cb.apply(this, arguments);
        }.bind(this);
    
        Settings.__super__.fetch.call(this, opts);
    }