javascrip 异步操作之后返回新对象

functiontest(){
$.ajax({
url:xxx,
type:'GET',
success:function(data){
data:data;
functionemployee(data){
this.customer=function(){console.log(data)}
}
returnnewemployee(data);
}
})
}
varp=newtest()
p.customer()//没有找到employee这个方法想这样调用需要怎么做?
千巷猫影
浏览 465回答 2
2回答

潇潇雨雨

你这个问题有3个问题1.异步操作后返回结果2.return返回的其实是success函数,并不是test3.varp=newtest()前面两个都是undefined的原因解决办法:一、1.使用promise或者async/await2.ajax变同步async:false二、在上一步的基础上把return放在test三、这里不用再new了,因为return的时候已经构造了。

阿波罗的战车

打完答案,发现答非所问了?或者是异步队列的原因。ajax还在异步中时,代码`varp=newtest()`其实已经执行完毕,导致,p这个对象,都是undefine。原答案:看过jQuery源码的可能知道这个东西:returnnewjQuery.fn.init();题主问题,其实和下面代码是类似的。functionB(){this.c=3;this.d=4;}functiontest(){this.a=1;this.b=2;returnnewB()}varnewTest=newtest();newTest.a//undefinednewTest.b//undefinednewTest.c//3newTest.d//4(吐槽一下这个在某些书上没法找到坑)不论你调用varnewTest=test()或是varnewTest=newtest()结果中,.a.b都是undefined。其槽点,就是return,存在return语句,且return一个对象时,这个新return的对象的作用域,会取代之前代码生成的对象。但是如果return的是数值,字符,就不会有这个坑。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript