new Fun()与Fun()的区别

我们先来看一道题。

var foo = 123;
function print(){
    this.foo = 234;
    console.log(foo);
}
//print()和new print()分别打印出什么

首先说说print()。print()打印的foo在AO里面并没有,所以要到GO里面去找,也就是window里面的foo,为123,而函数里面的this指向的是window,相当于把123改为234,最后打印出来,答案为234。

![print()的结果]
image.png

再说说new print()。print()打印的也是foo,但是这个时候的函数里面this有人了,即

var foo = 123;
function print(){
    //var this = Object.create(print.prototype)
    this.foo = 234;
    console.log(foo);
}

此时this.foo = 234就是函数里面的对象里的东西了,但我们要访问的是foo,AO里面并没有foo,还得上GO里面找,找到的是123,从而打印出123。


new print()的结果

也就是说,当你new一个函数执行时,函数里面会生成一个新的对象

var this = {
  __proto__:'函数名'.prototype
}

像刚才那题使用new print(),this指向新生成的对象,this.foo被放进了这个对象里面,所以你在函数AO里面找不到foo,只能往上一级去找,也就是window里的foo。

你可能感兴趣的:(new Fun()与Fun()的区别)