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

关于new了之后的返回值情况

function C(){
 		this.a = 99;
 		return {a :90};
 		}
 
 		var o = new C();//s输出的o 是这个结果Object {a: 90}

看这个我试了一下之后,O的返回值就是前面函数里面的那个return里面的值

但是!!!看下面这个

function foo(){

 			this.b = 10+b;
 			return this.a;
 		}
 		var b = 100;
 		var l = new foo();//输出是foo {b: 110}

为什么这里的返回的不是return里面的那个值???什么鬼

这两个情况有什么区别?因为我就是看到老师那一节bind和new结合的那个看不太懂

正在回答

3 回答

new操作符应该会影响this的值,同时,如果函数体里没有return语句或者返回的是一个基本类型的值时,就将这个this的值作为返回值,但是返回的是一个对象,那么就将这个对象作为返回值返回。在这里,首先会创建一个新的对象,然后将这个this指向这个空对象,然后执行b的语句操作,最后返回这个对象,这个对象包括了b的值。

0 回复 有任何疑惑可以回复我~
#1

前端小蜗牛_

就个人认为,使用了new关键字去实例化一个函数时,压根不会管你的返回值,如果没有返回值,就直接创建一个新的空对象并进行返回。。。。待大咖改正
2017-04-16 回复 有任何疑惑可以回复我~
#2

前端小蜗牛_ 回复 前端小蜗牛_

前提是不返回对象的情况...
2017-04-16 回复 有任何疑惑可以回复我~

用new之后,如果return 的是一个对象,例如第一个return{a:99},那么返回这个对象,如果return不是对象例如第二个return this.a那么会返回this,此时this会初始化为一个空对象。这个this.b = 10+b;意思是把空对象this的b属性设置为10+b.

0 回复 有任何疑惑可以回复我~

因为之前return了一个b = 10+b;

如果new一个,前面已经运行了一个全局变量b=100;所以l返回的foo的b是是100+10=110

0 回复 有任何疑惑可以回复我~
#1

深夏之叶 提问者

为什么不是返回的是a的值
2016-10-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于new了之后的返回值情况

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信