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

来源:6-4 [JavaScript]函数属性arguments

深夏之叶

2016-10-19 13:13

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回答

  • 前端小蜗牛_
    2017-04-16 14:01:43

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

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

    前提是不返回对象的情况...

    2017-04-16 14:11:25

    共 2 条回复 >

  • q_Amily
    2016-12-05 12:33:18

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

  • 战国那年策反神
    2016-10-19 17:30:44

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

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

    深夏之叶

    为什么不是返回的是a的值

    2016-10-19 18:55:28

    共 1 条回复 >

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281112 学习 · 1020 问题

查看课程

相似问题