深夏之叶
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结合的那个看不太懂
new操作符应该会影响this的值,同时,如果函数体里没有return语句或者返回的是一个基本类型的值时,就将这个this的值作为返回值,但是返回的是一个对象,那么就将这个对象作为返回值返回。在这里,首先会创建一个新的对象,然后将这个this指向这个空对象,然后执行b的语句操作,最后返回这个对象,这个对象包括了b的值。
用new之后,如果return 的是一个对象,例如第一个return{a:99},那么返回这个对象,如果return不是对象例如第二个return this.a那么会返回this,此时this会初始化为一个空对象。这个this.b = 10+b;意思是把空对象this的b属性设置为10+b.
因为之前return了一个b = 10+b;
如果new一个,前面已经运行了一个全局变量b=100;所以l返回的foo的b是是100+10=110
JavaScript深入浅出
281101 学习 · 1020 问题
相似问题