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) {
}
}
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调用后执行的代码作为回调传递。另请参见:和: