Javascript 将jQuery ajax回调参数定义为现有对象类型
我承认这个问题已经到了我对JavaScript和jQuery所知的极限,也许有一种更合适的方式来陈述我的问题(这有助于找到现有的解决方案),但如果你能容忍我的话,这就是我想要的 我已经定义了一个现有的对象类。我正在使用getJSON进行jqueryajax调用,我希望我的回调参数(它是一个对象)被分类为我的自定义对象,以便我可以从中访问该类的方法 所以我有一些对象类Javascript 将jQuery ajax回调参数定义为现有对象类型,javascript,jquery,object,callback,Javascript,Jquery,Object,Callback,我承认这个问题已经到了我对JavaScript和jQuery所知的极限,也许有一种更合适的方式来陈述我的问题(这有助于找到现有的解决方案),但如果你能容忍我的话,这就是我想要的 我已经定义了一个现有的对象类。我正在使用getJSON进行jqueryajax调用,我希望我的回调参数(它是一个对象)被分类为我的自定义对象,以便我可以从中访问该类的方法 所以我有一些对象类 function Boo() { this.param1; this.param2; this.yah = fun
function Boo() {
this.param1;
this.param2;
this.yah = function() {
...
}
}
然后我在其他地方也有类似的东西
$.getJSON(url,function(new_instance) {
//from my php source this passed object is already loaded with param1, param2...
alert(new_instance.param1); //no probs
//but i want to be able to then call
new_instance.yah();
});
换句话说,我希望将新的_实例视为Boo()的实例。我知道在ActionScript之类的东西中,你必须对传入参数进行分类,正是因为这个原因,我不知道JS有多大的灵活性
我考虑过使用一个中间函数来接收传入对象并创建/填充Boo()的新实例,但不确定是否有更聪明的方法
非常感谢 您可以做什么:
$.getJSON(url,function(newObjData) {
var newObj = $.extend(new Boo(), newObjData);
newObj.yah();
});
也可以考虑将您的代码> BOO方法移到对象<代码>原型< /COD>中,因此方法不为每个代码[Boo< <代码> >实例:< /P>重新创建。
var Boo = function() {
this.param1;
this.param2;
}
Boo.prototype.yah = function() {
console.log(this.param1);
}
不要在构造函数中定义方法,否则 每次构造师 被称为。将它们移到原型上:
Boo.prototype = {
yah: function() {
},
bah: function() {
}
...
};
一个小助手函数:
function coerceTo( proto, values ) {
var r = Object.create( proto );
for( var key in values ) {
r[key] = values[key];
}
return r;
}
根据浏览器的不同,Object.create
可能不可用,因此:
if (!Object.create) {
Object.create = function (o) {
if (arguments.length > 1) {
throw new Error('Object.create implementation only accepts the first parameter.');
}
function F() {}
F.prototype = o;
return new F();
};
}
用法:
new_instance = coerceTo( Boo.prototype, new_instance );
new_instance instanceof Boo //true
new_instance.yah();
到目前为止,对于这两个回答,是的,我知道我应该进行原型设计(;D),您可能会认为我的最终产品将更高效地编写…这样调用原始构造函数可能会导致副作用或错误。好的,非常感谢这两个答案,这一个看起来非常低预算,假设我正在构建一个API,我希望能特别挑剔,让用户只使用myfunction(params,function(boo){..},并使用'boo'作为boo()马上在他们的脚本中,但是可能要求太多了!这取决于你的需要。但是我应该承认@Esailija的答案在概念上是正确的,而且更健壮。下面是我所做的,它没有正确的原型化,但总的想法是…
Boo.prototype.dp(params,callback){$.getJSON(params,function(r){if(typeof(r)='object'){//我认识到这一行可以写得更好,如上var t=new Boo();//在这里循环并加载参数(未显示)callback(t);}否则{callback(r);});另一个_instance.dp(params,function(new_instance){new_instance.yah();//万岁!});