向参数对象添加值
Adding value to the arguments object
我在JavaScript方法中为参数对象添加值时遇到问题。
我试图添加一个额外的成功回调到Backbone.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对象最初为空时,就会出现问题。我能够设置arguments[0]
和success
的值,因为我应该。但是回调永远不会运行。
我错过了什么?
arguments
属性是一个对象,而不是一个数组,这意味着当您设置arguments[0] = {};
时,它看起来像(http://jsfiddle.net/nikoshr/n93wfm8a/)
{
0: {}
}
但是,models.Settings.__super__.fetch.apply
期望一个数组(或者至少是length
属性匹配的内容),并且没有得到它。
设置
length
属性:
http://jsfiddle.net/nikoshr/n93wfm8a/1/if(!arguments.length) { arguments[0] = {}; arguments.length = 1; }
稍微好一点,用数组
初始化arguments
http://jsfiddle.net/nikoshr/n93wfm8a/2/if(!arguments.length) { arguments = [{}]; }
重写整个内容以利用方法的签名
model.fetch([options])
并使用Function.prototype.call
http://jsfiddle.net/nikoshr/n93wfm8a/4/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); }
相关文章:
- FabricJs-限制主对象内添加对象的移动区域
- 向Angular作用域对象添加对象数组——TypeError
- Javascript使用+添加对象
- 动态添加对象的jQuery事件处理程序
- 添加JQuery UI在Meteor中添加对象后可调整大小
- 在我的上下文中添加对象的动态方法
- 如何检测是否已使用 angular.forEach AngularJS 添加对象
- 在对象coffeescript中添加对象数组
- 使用Jquery在单击“”时显示表单;添加对象”;按钮
- 我可以向数组添加对象键吗
- 向扩展数组的JS集合添加对象(继承?)
- 尝试通过从自动完成推送添加对象时缺少 $$Hashkey
- 添加对象值 Javascript
- 在上传问题时添加对象
- 如何使用 javascript 的变量名称在数组中添加对象属性
- 在 JavaScript/TypeScript 中动态地“直接”添加对象属性到“this”
- 如何仅当对象不存在时才使用javascript添加对象
- 如何在数组末尾添加对象的副本
- rails在javascript url中添加对象
- ThreeJS-按不同顺序添加对象会影响alpha/显示