Javascript构建具有属性的对象

时间:2017-02-21 09:58:55

标签: javascript

我有这段代码:

HTTP.get(
  `url`,
  { "params": {"id": id},
    "headers": {"h1": getH1(), "h2": getH2()}
  }

我想要的是不是在单独的函数中构建头文件,而是在一个函数中构造所有头文件。像这样:

HTTP.get(
  `url`,
  { "params": {"id": id},
     createHeaders(); //or "headers": {createHeaders()};
  }

所以在我的createHeaders()中,我可以选择添加h1,h2 ......中的哪一个。

createHeaders应该看起来像这样(伪代码):

function createHeaders(){
    var headers;
    if(cond1)
        headers.addHeader1();
    if(cond2)
        headers.addHeader2();
    if(cond3)
        ...

    return headers;
}

这可以在JavaScript中完成吗?

请看一下createHeaders函数。我正在寻找的是,如何构造头对象以及返回HTT.get()的内容。

4 个答案:

答案 0 :(得分:2)

var _headers = getHeaders(anyArguments);
HTTP.get(
  `url`,
  { 
    "params": {"id": id},
    "headers": _headers 
  }
//
function getHeaders(){
   var _headers;
   if(cond1){
     _headers.h1="";
   }
   return _headers;
}

答案 1 :(得分:1)

您可以查看以下内容

Object.assign

Object.assign用于合并对象或将对象复制到一个目标对象中。它非常方便,但它是一项新功能,并不是所有浏览器都支持。请在使用前检查browser compatibility

function getHeaders() {
  var header = {
    header: null
  }
  var random = Math.floor(Math.random() * 10 ) % 2
  header.header = random === 0 ? "Random is odd" : "Random is even";
  return header
}


function makeAPICall() {
  var params = {
    url: '/test/foo123'
  }
  Object.assign(params, getHeaders());
  console.log(params);
}
makeAPICall();

传递参考

JS中的对象通过引用传递。您还可以传递对象的引用并进行更新。

function setHeaders(obj) {
  var random = Math.floor(Math.random() * 10) % 2
  if(random)
    obj.header = "Random is odd"
  else
    obj.header = "random is even"
}


function makeAPICall() {
  var params = {
    url: '/test/foo123'
  }
  setHeaders(params);
  console.log(params);
}
makeAPICall();

答案 2 :(得分:1)

你可以做到这一点

   HTTP.get(
      `url`,
      { 
        "params": {"id": id},
        "headers": createHeader(condition)
      }

    function createHeader(condition) {
      switch(condition) {
         case one:
            return {"h1": getH1(), "h2": getH2()}
         case two:
            return {"h3": getH1(), "h4": getH2()}
      }
    }

答案 3 :(得分:1)

我认为这是你想要完成的事情:

getH1 = () => 'hello';
getH2 = () => 'world';

function createHeaders(cond){
    var headers = {};
    for (let i = 0; i < arguments.length; i++) {
      switch (arguments[i]) {
        case 1:
        headers.h1 = getH1();
        break;
        case 2:
        headers.h2 = getH2();
        break;
      }
    }
    return headers;
}
console.log('"headers": ', createHeaders(1, 2));

希望这有助于:)

相关问题