Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建C+的最佳且高效的方法+;JS中类似结构的东西_Javascript_Json_Node.js - Fatal编程技术网

Javascript 创建C+的最佳且高效的方法+;JS中类似结构的东西

Javascript 创建C+的最佳且高效的方法+;JS中类似结构的东西,javascript,json,node.js,Javascript,Json,Node.js,我有一个JSON数据,在我的JS代码中作为 let CreateIssueFormData = (function() { return { "fields": { "project": { "key": "NC" }, "issuetype": { "id": "" }, "compo

我有一个JSON数据,在我的JS代码中作为

let CreateIssueFormData = (function() {
    return {
        "fields": {
            "project": {
                "key": "NC"
            },

            "issuetype": {
                "id": ""
            },

            "components": [{
                "id": ""
            }],

            "summary": "",

            "description": "",

            "labels": [],

            "timetracking": {
                "originalEstimate": "1w",
                "remainingEstimate": "5d"
            }

        }
    }
});
我把它当作

let formData = new CreateIssueFormData();
formData.fields.issuetype.id = reqParams.issuetype;
formData.fields.components[0].id = reqParams.component;
formData.fields.summary = reqParams.summary;
formData.fields.description = reqParams.description;
我首先创建了类一样的数据结构,这样每当我需要它时,我都会实例化一个对象,并给那个实例它的值

还声明了类似于struct的语句,让我知道对象中应该有什么

问题:

  • 这是用javascript实现的好方法吗
  • 还有其他有效的方法吗

  • 我已经开始JS几个月了,而且之前我用C++编写代码。p> 用Javascript轻松实现这一点的最佳方法。Javascript没有结构,因此在这种情况下使用对象绝对是最有效的方法

    现在,如果它是最好的方法,那就取决于你想用它做什么,例如,如果你喜欢这种语法风格,你也可以使用一个类。但是,ES5或以下的课程不适用。

    请查看

    在您的情况下,可以创建构造函数:

    let CreateIssueFormData = function() {
      this.fields = { 
        project: {
          key: "NC" 
        }
      }
    }
    
    let formData = new CreateIssueFormData()
    formData.fields.project.key = reqParams.key
    

    嗯,让函数返回对象的骨架是没有用的。更好地使用该函数是将其传递给reqParams:

    let CreateIssueFormData = function(reqParams) {
      // if reqParams is null, use an empty object
      reqParams = reqParams || {};
    
      return {
        "fields": {
          "project": {
            "key": "NC"
          },
    
          "issuetype": {
            "id": reqParams.issuetype || "" // after the || is the default value if issueType is null/undefined, you can put what you want
          },
    
          "components": [{
            "id": reqParams.component || ""
          }],
    
          "summary": reqParams.summary || "",
    
          "description": reqParams.description || "",
    
          "labels": [],
    
          "timetracking": {
            "originalEstimate": "1w",
            "remainingEstimate": "5d"
          }
        }
      }
    };
    
    // this will have some fields with values
    let formData = new CreateIssueFormData(reqParams);
    
    // this is a skeleton only with no values
    let emptyFormData = new CreateIssueFormData();
    

    现在,该功能非常有用,可以节省您的腿部工作。

    是的。。。。我喜欢这个主意。我这样使用JSON的目标也是使我的函数体更小。我希望使用这种样式可以增加一个用途;该语句将创建一个克隆,还是只是一个引用来向该函数传递参数???不,它不会创建克隆,检查是否确实收到了reqParams是安全的。这与
    if(reqParams==null)reqParams={}
    相同。您可能知道,Javascript中的所有参数都是可选的,因此有时您必须检查是否确实收到了参数。参数是按值传递的,因此没有引用问题。我有一个问题。。。如果我使用上述模式,如何添加私有成员?您可以通过在构造函数中将私有方法声明为变量(使用
    var
    let
    )来获得私有方法。在这种情况下,它们不会公开,因此您将实现封装。