Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 创建新对象时,如何使用已定义的设置创建对象/函数?_Javascript - Fatal编程技术网

Javascript 创建新对象时,如何使用已定义的设置创建对象/函数?

Javascript 创建新对象时,如何使用已定义的设置创建对象/函数?,javascript,Javascript,我想这样做: function Student (id, class) { var id = id var class = class this.get = function (subject) { $.ajax({ url: 'myurl', data: { id: id, class: class, subject: subject }, success: function (r) { return r } }) }

我想这样做:

function Student (id, class) {
  var id = id
  var class = class

  this.get = function (subject) {
    $.ajax({
      url: 'myurl',
      data: { id: id, class: class, subject: subject },
      success: function (r) { return r }
    })
  }
  this.set = function (subject, mark) {
    $.ajax({
      url: 'myurl',
      method: 'post',
      data: { id: id, class: class, subject: subject, mark: mark },
      success: function (r) { return r }
    })
  }
}
我的问题是如何修改我的函数,以便创建新的student,如下所示

var s1 = new Student (22, 4) // to set predefined id & class
但是,我希望集合和get如下所示(如jqueryset&get)

**

因此,我认为答案是不可能作为一个对象来存储属性id和class,并像一个没有函数名的函数那样调用。谢谢你们的回答,伙计们

**

  • 您可以检查调用者提供了多少个参数。或检查未定义的值

    function test(a, b) {
      // both ifs check b was not provided
      if (typeof b === "undefined") {
      }
      if (arguments.length == 1) {
      }
    }
    
  • 您当前的函数可能无法工作,因为您正在从回调返回。AJAX(在大多数情况下)是异步的。因此,在您的例子中,您必须添加另一个参数来提供回调

    this.get = function (subject, callback) {
      $.ajax({
        url: 'myurl',
        data: { id: id, class: class, subject: subject },
        success: function (r) { callback(r); }
      })
    }
    
  • 仅供参考,
    class
    是ECMAScript规范保留的关键字

    function sample(x,y){
    id=x;
    subjectClass =y;
    if(arguments.length == 1){
    //getter
    }
    else{
    //setter
    }
    }
    
    呼叫获取者

    sample("maths")
    
    呼叫接线员

    sample("history",70);
    
    注:

    类是保留关键字,因此请删除它,然后可以使用其他变量名

    但是,我想要一套,并得到如下

    var s1 = new Student (22, 4) // to set predefined id & class
    
    这意味着
    s1
    将是一个函数,而不是
    Student
    实例。所以你的构造函数需要返回它

    function student(id, klass) {
        // no need to declare variables here that are parameters already
        return function(subject, mark) {
            var data = {id: id, class: klass, subject: subject},
                opt = {url: 'myurl', data: data};
            if (arguments.length > 1) { // something was given to `mark`
                data.mark = mark;
                opt.method = "post";
            }
            return $.ajax(opt);
        };
    }
    
    顺便说一句,由于您不能,函数将返回jqXHR承诺:

    var s1 = student(22, 4); // `new` is unnecessary now
    s1("math").then(function(r) { console.log("got maths result:", r); });
    s1("history", 70).then(function(r) { console.log("successfully set marks"); });
    

    获取所提供参数数量的另一种方法是
    arguments.length
    。也许是更好的解决方案。你不能像函数一样调用对象(不像PHP):
    s1(“数学”)
    。这将导致
    未捕获类型错误:对象不是正在触发的函数。请参阅我的答案以获得更多建议。您不能通过ajax返回任何内容。您需要将要在ajax调用后执行的代码作为回调传递。另请参见:和: