0

我想做这样的事情:

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 }
    })
  }
}

我的问题是如何修改我的功能,以便我可以创建新学生,如下所示

var s1 = new Student (22, 4) // to set predefined id & class

但是,我想要集合并得到如下(如 jquery set & get)

s1("math") // to get 
s1("history", 70) // to set

**

所以我认为答案不可能作为一个对象来存储属性 id 和类并像没有函数名的函数一样调用。谢谢你们的回答。

**

4

3 回答 3

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

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

    this.get = function (subject, callback) {
      $.ajax({
        url: 'myurl',
        data: { id: id, class: class, subject: subject },
        success: function (r) { callback(r); }
      })
    }
    

仅供参考,class是 ECMAScript 规范的保留关键字。

于 2013-08-15T08:17:54.033 回答
0
function sample(x,y){
id=x;
subjectClass =y;
if(arguments.length == 1){
//getter
}
else{
//setter
}
}

调用吸气剂

sample("maths")

调用设置器

sample("history",70);

笔记 :

class 是保留关键字,所以请删除它,您可以使用其他变量名

于 2013-08-15T08:21:12.680 回答
0

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

这意味着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);
    };
}

顺便说一句,由于您无法从 ajax 调用返回响应,因此该函数将返回 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"); });
于 2013-08-15T10:02:29.753 回答