为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2019-05-24 18:36:50
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这个方法想这样调用需要怎么做?
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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

TA贡献1862条经验 获得超6个赞

打完答案,发现答非所问了?
或者是异步队列的原因。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//undefined
newTest.b//undefined
newTest.c//3
newTest.d//4
(吐槽一下这个在某些书上没法找到坑)不论你调用varnewTest=test()或是varnewTest=newtest()结果中,.a.b都是undefined。其槽点,就是return,存在return语句,且return一个对象时,这个新return的对象的作用域,会取代之前代码生成的对象。但是如果return的是数值,字符,就不会有这个坑。
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 464 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信