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

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

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

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

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

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

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

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

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

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

一.首字母大小写惯例:

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

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

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

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

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

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

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

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

代码运行效果截图如下:

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

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

代码运行效果截图如下:

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

三.return语句的使用:

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

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

返回值分为两种情况:

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

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

四.箭头函数:

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

<JavaScript> 普通函数与构造函数的区别的更多相关文章

  1. JavaScript中函数和构造函数的区别

    构造函数也是函数 构造函数和其它函数的唯一区别: 构造函数是通过new操作符来调用的. 也就是说如果构造函数不用new操作符来调用,那它就是普通函数,反过来说任何函数通过new操作符来调用就可以当做构 ...

  2. 牛客网Java刷题知识点之构造函数是什么、一般函数和构造函数什么区别呢、构造函数的重载、构造函数的内存图解

    不多说,直接上干货! 构造函数是什么? 构建创造对象时调用的函数. 构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量. 注意: 创建对象都必须要通过构造函数初始化. 构造函数的特点   ...

  3. javascript定义函数不同方式的区别

    学习javascript中遇到了这么一个问题,代码如下: var test = 'a'; function test() { alert('Hello World!'); } alert(test); ...

  4. <JavaScript> 匿名函数和闭包的区别

    匿名函数:没有名字的函数:并没有牵扯到应用其他函数的变量问题.仅仅是没有名字. 定义方式: 1,var A = function(){ }; 2, (function (x,y){ })(2,3); ...

  5. JavaScript中的普通函数和构造函数

    在写JavaScript代码过程中,用到需要写构造函数的地方不多,但还是需要详细了解一下 本文尽量描述清楚什么是JavaScript中的构造函数,以及普通函数和构造函数的区别

  6. 前端笔记之JavaScript面向对象(一)Object&函数上下文&构造函数&原型链

    一.对象(Object) 1.1 认识对象 对象在JS中狭义对象.广义对象两种. 广义:相当于宏观概念,是狭义内容的升华,高度的提升,范围的拓展.狭义:相当于微观概念,什么是“狭”?因为内容狭隘具体, ...

  7. javascript工厂函数(factory function)vs构造函数(constructor function)

    如果你从其他语言转到javascript语言的开发,你会发现有很多让你晕掉的术语,其中工厂函数(factory function)和构造函数(constructor function)就是其中的一个. ...

  8. JavaScript中的普通函数与构造函数比较

    问题 什么是构造函数?构造函数与普通函数区别是什么?用new关键字的时候到底做了什么?构造函数有返回值怎么办?构造函数能当普通函数调用吗? thisthis永远指向当前正在被执行的函数或方法的owne ...

  9. JavaScript变量的作用域和函数的作用域的区别

    变量作用域和函数作用域都涉及到变量值的变化,本文旨在让大家明白他们之间的区别 变量的作用域: 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...

随机推荐

  1. 如何用HAProxy+Nginx实现负载均衡

    一.什么是HAProxy HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点, ...

  2. Ubuntu系统---NVIDIA 驱动安装

    Ubuntu系统---NVIDIA 驱动安装 第一次安装“NVIDIA 驱动”,小小的激动,因为终于可以玩GPU了.预想一块GPU,盼望太久,差点放弃,感谢J姐让我捡个漏.但是,第一次新的试错过程,网 ...

  3. 传说中Python最难理解的点,看这完篇就够了

    本文转载自简书,作者为菜鸟,感谢作者的辛苦付出. 这不是我第一次学Python入门课,去年.前年我都学过Python入门.所以文章的标题一点都没有标题党的意思.但是整个入门篇还有一个最难的东西没有讲, ...

  4. CSS3媒体查询实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. onbeforeunload、onpagehide、onunload、onload、onpageshow的正确执行顺序

    一.Chrome支持onbeforeunload.onpagehide.onunload,只是在这些方法执行的时候alert,console这些方法已经被注销了. 二.浏览器跳转.关闭.刷新时都按a, ...

  6. Java锁--框架

    根据锁的添加到Java中的时间,Java中的锁,可以分为"同步锁"和"JUC包中的锁". 同步锁 即通过synchronized关键字来进行同步,实现对竞争资源 ...

  7. mysql 5.5 编码设置为utf8 转载自:http://outofcontrol.ca/thoughts/comments/change-mysql-5.5-default-character-set-to-utf8

    Change MySQL 5.5 default character-set to UTF8 连接里是linux下的 在window下my.ini Add under [client]  the fo ...

  8. 遍历windows窗口

    原文 1. GetDesktopWindow GetNextWindow HWND hAll = ::GetDesktopWindow(); HWND hCurrent = ::GetNextWind ...

  9. P1972 [SDOI2009]HH的项链 莫队or树状数组

    用什么树状数组莫队多帅 思路:树状数组\(or\)莫队(其实还是推荐树状数组\(QwQ\)) 提交:我告诉你我卡了一会儿常 卡不满原因:没有用奇偶性排序 题解: 莫队: 就是裸的莫队,把询问排序\(e ...

  10. sql 临时表的使用详解

    Sqlserver数据库中的临时表详解   临时表在Sqlserver数据库中,是非常重要的,下面就详细介绍SQL数据库中临时表的特点及其使用,仅供参考.   临时表与永久表相似,但临时表存储在tem ...