我希望做这样的事情:
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&的对象。类和函数调用就像没有函数名的函数。谢谢你的回答。
**
答案 0 :(得分:2)
您可以查看调用者提供的参数数量。或者检查未定义的值。
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规范的保留关键字。
答案 1 :(得分:0)
function sample(x,y){
id=x;
subjectClass =y;
if(arguments.length == 1){
//getter
}
else{
//setter
}
}
调用getter
sample("maths")
呼叫设定者
sample("history",70);
注意:
class是保留关键字,因此请将其删除,您可以使用其他变量名称
答案 2 :(得分: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);
};
}
顺便说一句,因为你不能return the response from an ajax call,该函数将返回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"); });