Js new一个函数和直接调用函数的区别

js中 function可以定义方法,也可以定义类

不用new,也就是普通的函数调用而已,所以若是函数本身没有返回值,普通的函数调用没有什么意义
如:
var person=new Person();//person是一个对象
var person = Person();//这只是一次普通的函数调用并赋值而已。

function Person(name,age){
 
this.name=name;
this.age=age;
this.sayName=function(){
alert(this.name);
      };
}
 
//var person=new Person("张三",20); //此处为 构造对象,构造对象的话,返回的新对象是由解析器自己生成的。
var person=Person("张三",20); 
person.sayName();//报错 person undefined 此处为普通函数调用,又没有给定返回值,出错。
 
//因为此时this指向window对象,
window.sayName();//此时不会报错
 
接下来就问,为什么我赋值给person,可以用window来引用呢?
因为如果不用new就相当于普通函数调用,而 Person()根本没有返回值,
所以Person根本就没赋值给person,此时的person只是一个undefined,
但是Person却执行了一次,成为了window的对象,this指向了window,所以window可以直接使用Person的方法,
 
var person= new Person("张三",20);
person.sayName();//正常打印






原文地址:https://www.cnblogs.com/cowboybusy/p/9504419.html