什么是构造函数?构造函数与普通函数的区别?

208 阅读2分钟

什么是构造函数?

典型的面向对象编程语言(比如 Java 和 Python),都有“类”(class)这个概念。所谓“类”就是对象的模板,对象就是“类”的实例。但是,JavaScript 语言的对象体系,不是基于“类”的,而是基于构造函数(constructor)和原型链(prototype)。

因此构造函数就是专门用来生成对象实例的函数(模板) ,或者说批量来创建类似的对象

构造函数与普通函数的区别?

1、调用方式不一样
 //构造函数也是一个普通函数,创建方式和普通函数一样。
 function Foo(){}
 Foo();//普通函数调用方式
 var f = new Foo();//构造函数调用方式
 复制代码
  • 普通函数调用方式:直接调用person();
  • 构造函数调用方式:需要使用new关键字来调用 new person();
2、作用也不一样(构造函数用来批量来创建类似的对象)
3、首字母大小写习惯
  • 一般构造函数的函数名称会用大写
  • 普通函数用小写
4、函数中this的指向不同
  • 普通函数中的this,在严格模式下指向undefined,非严格模式下指向window对象。
 function foo(){
   console.log(this===window);
 }
 foo();
 //代码运行结果:true
 复制代码
  • 构造函数的this则是指向它创建的对象实例。
 function Foo(){
   this.name = "令狐冲";
 }
 var f = new Foo();
 console.log(f.name);
 //代码运行结果:令狐冲
 //补充:构造函数的函数名和类名相同:Foo()这个构造函数,Foo是函数名,也是这个对象的类名。
5、写法的不同

构造函数:

 function Person(name){
   this.name = name;
 }
 var p = new Person('John');//使用new关键字,不使用return
 复制代码

普通函数:

 function person(name){
   var obj = new Object();
   obj.name = name;
   return obj;//使用return
 }
 var p = person('john');
 复制代码
 function person(name){
   this.name = name;
   return this;//使用return
 }
 var p = person('john'),