无法使用默认值替换jquery.extends

时间:2016-07-25 10:05:09

标签: jquery call

我正在玩对象上的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替换默认数据,如果列表对象没有传入属性。

1 个答案:

答案 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);