我正在玩对象上的apply,bind和call方法。下面我无法用公共数据替换layout
,如果我没有从我正在呼叫的对象传入。
var data = [{
"option": "com_social",
"userId": localStorage.getItem("ckuser"),
"layout": "getSample",
"view": "conversations",
"format": "json",
"limit": 1
}];
var Data = 'default';
function ajaxCall(opt){
var opt = jQuery.extend({}, data, opt);
var layout = opt[0]['layout'];
this.Data = layout;
}
/***global variable & functions end***/
var list = {
data : [{
"option": "com_social",
"userId": localStorage.getItem("ckuser"),
"layout": "getConversations",
"view": "conversations",
"format": "json",
"limit": 2
}]
}
ajaxCall.call (list, list.data);
console.log(list.Data);
如果我没有传递"layout": "getConversations",
对象list
,则表示未定义。我明白我要求使用列表对象中的数据。但是现在我希望能够使用jQuery.extend
替换默认数据,如果列表对象没有传入属性。
答案 0 :(得分:1)
jQuery.extend
类似的 Object.assign
将扩展一个对象,但不是数组。
在下面的代码中:
var opt = jQuery.extend({}, data, opt);
data
是一个没有键的数组。所以,它没有像你期望的那样工作..
请改为尝试:
var opt = jQuery.extend({}, data[0], opt[0]);
代替var opt = jQuery.extend({}, data, opt);