JS中的return与this
this

我们要打印fun fun()和 new fun()
此时对应的结果应该为函数体 return返回值 和 fun{ xxx:'1231321'}
一般来说打印函数不带括号是不执行函数的内容的.
其中如果不加new fun() this指向window 加了之后this指向new的对象本身

第一个Foo.getName()直接对号入座 打印2
第二个getName() 我们发现有一个变量声明 和一个函数声明 此时由于提升 变量的优先级要大于函数 打印4
第三个先执行Foo()后返回this,这时this指向window 也就是window.getName()打印输出1
第四个再次使用getName(),由于第三个改变了全局的getName() 所以输出结果和第三个一样
如果我们要执行new Foo().getName()通过原型查找机制,先在自身找,没有找到=>到构造函数Foo()中去找,由于Foo()中的getName指向window ,没有加this,所以构造函数也没有=>到自身原型去找没有=> 到构造函数原型的Foo.prototype.getName找到了 打印输出3

o.b.fn()=>fn里面两个打印输出 一个是this.a 一个是this指向谁=>fn是b中的,所以this指向b,b中的a是2.如果b中没有a的话,由于this的存在,a不会去找o中的a,结果为undefined.

let a=new A() 由于new操作符 a现在是对象A{name:123}
然后输a.getA,在a中没有找到getA方法,到构造函数中去找也没有,到原型中去找到了
于是打印this,这时候的this指向全局window

对于obj,test1() 函数中调用函数是一个闭包的过程 this指向window 为11
而obj.test2() this指向obj 为6