<JavaScript> 普通函数与构造函数的区别

JavaScript中存在构造函数与函数两个概念。

这可能会给初学者造成一定的困扰,难不成存在两种函数。

然而事实这两种函数的构成完全一样,无论从长相还是气质都是一模一样的。

区别点在于,所扮演觉得不同,同一个人在不同的场合具有不同的角色。

就比如曹操对将要出征的曹彰所说"居家为父子受事为君臣"。

同是曹彰,在家里与曹操的是父子关系,领兵在外则是上下级关系。

构造函数与普通函数也是如此,代码实例如下:

function Foo(){}  
Foo();
let f=new Foo();

Foo()是作为普通函数使用,使用new 调用则是作为构造函数使用。

使用方式的不同,自然会产生很多差别,下面分别做一下介绍。

一.首字母大小写惯例:

这不是语法规定,而是使用惯例。

作为构造函数,函数的首字母通常会使用大写形式,作为普通函数则习惯于用小写形式。

构造函数扮演的就是标准面向对象语言中类的角色,ES2015新增class类概念。

遵循此原则有利于团队合作开发,外观即可推断函数将要扮演的角色。

二.函数中this的指向不同:

普通函数中的this,在严格模式下指向undefined,非严格模式下指向window对象。

而构造函数的this则是指向它创建的对象实例。

function Foo(){
  console.log(this===window);
}  
Foo();

代码运行效果截图如下:

a:3:{s:3:"pic";s:43:"portal/201811/25/171321f0u83fuh5upshtsh.png";s:5:"thumb";s:0:"";s:6:"remote";N;}

非严格模式下指向window对象,严格模式下指向undefined,不再演示。

function Foo(){
  this.webName="蚂蚁部落";
}  
let f=new Foo();
console.log(f.webName);

代码运行效果截图如下:

a:3:{s:3:"pic";s:43:"portal/201811/25/171354schcf4t1xari2xzx.png";s:5:"thumb";s:0:"";s:6:"remote";N;}

构造函数中的this指向它所创建的对象实例。

三.return语句的使用:

普通函数通常要使用return语句返回一个值,如果没有return语句默认返回undefined。

而构造函数则一般不需要return语句,当然也可以有return语句,感觉使用return完全没有意义。

返回值分为两种情况:

(1).如果构造函数return一个值类型数据,那么完全忽略此return语句,和没有一样。

(2).如果构造函数return一个引用类型数据,那么它的返回值就是此引用类型数据,而不是创建的对象实例。

四.箭头函数:

ES2015新增箭头函数,它只能作为普通使用,不能用作构造函数。

原文地址:https://www.cnblogs.com/isAndyWu/p/11557065.html