<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();
代码运行效果截图如下:
非严格模式下指向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> 普通函数与构造函数的区别的更多相关文章
- JavaScript中函数和构造函数的区别
构造函数也是函数 构造函数和其它函数的唯一区别: 构造函数是通过new操作符来调用的. 也就是说如果构造函数不用new操作符来调用,那它就是普通函数,反过来说任何函数通过new操作符来调用就可以当做构 ...
- 牛客网Java刷题知识点之构造函数是什么、一般函数和构造函数什么区别呢、构造函数的重载、构造函数的内存图解
不多说,直接上干货! 构造函数是什么? 构建创造对象时调用的函数. 构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量. 注意: 创建对象都必须要通过构造函数初始化. 构造函数的特点 ...
- javascript定义函数不同方式的区别
学习javascript中遇到了这么一个问题,代码如下: var test = 'a'; function test() { alert('Hello World!'); } alert(test); ...
- <JavaScript> 匿名函数和闭包的区别
匿名函数:没有名字的函数:并没有牵扯到应用其他函数的变量问题.仅仅是没有名字. 定义方式: 1,var A = function(){ }; 2, (function (x,y){ })(2,3); ...
- JavaScript中的普通函数和构造函数
在写JavaScript代码过程中,用到需要写构造函数的地方不多,但还是需要详细了解一下 本文尽量描述清楚什么是JavaScript中的构造函数,以及普通函数和构造函数的区别
- 前端笔记之JavaScript面向对象(一)Object&函数上下文&构造函数&原型链
一.对象(Object) 1.1 认识对象 对象在JS中狭义对象.广义对象两种. 广义:相当于宏观概念,是狭义内容的升华,高度的提升,范围的拓展.狭义:相当于微观概念,什么是“狭”?因为内容狭隘具体, ...
- javascript工厂函数(factory function)vs构造函数(constructor function)
如果你从其他语言转到javascript语言的开发,你会发现有很多让你晕掉的术语,其中工厂函数(factory function)和构造函数(constructor function)就是其中的一个. ...
- JavaScript中的普通函数与构造函数比较
问题 什么是构造函数?构造函数与普通函数区别是什么?用new关键字的时候到底做了什么?构造函数有返回值怎么办?构造函数能当普通函数调用吗? thisthis永远指向当前正在被执行的函数或方法的owne ...
- JavaScript变量的作用域和函数的作用域的区别
变量作用域和函数作用域都涉及到变量值的变化,本文旨在让大家明白他们之间的区别 变量的作用域: 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...
随机推荐
- 参数化查询防止Sql注入
拼接sql语句会造成sql注入,注入演示 namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() ...
- 单元测试自动生成工具evosuite
github地址:https://github.com/EvoSuite/evosuite 官网地址:http://www.evosuite.org 快速开始: 1. junit <de ...
- RT-Thread--简介
RT-Thread 概述 RT-Thread,全称是 Real Time-Thread,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行,但并不是真正的同时运行,而是宏 ...
- cookies, session, token
Cookie 是由客户端(通常是浏览器)保存的小型文本信息,其内容是一系列的键值对,是由 HTTP 服务器设置并保存在浏览器上的信息. 在post请求的瞬间,cookie会被浏览器自动添加到请求头中. ...
- 如何在jupyter中安装R
地址:(http://irkernel.github.io/installation/) 第一步:在R中安装必备包 install.packages(c('repr', 'IRdisplay', 'e ...
- vscode远程修改文件('file': A system error occured )
The command you want is :e (short for :edit). If you use :edit! it will discard local changes and re ...
- 7月新的开始 - Axure学习02 - 页面属性、钢笔工具
页面属性 页面属性可以修改整个页面的效果 包含: 属性.对交互用力和事件的编辑 样式.对页面的样式操作 说明.可以对整个页面进行说明.以及样式的说明 钢笔工具:锚点.路径 锚点:钢笔点击之后的点就是锚 ...
- Codeforces Round #543 (Div. 1, based on Technocup 2019 Final Round) 题解
题面戳这里 A. Diana and Liana 首先如果s>ks>ks>k一定无解,特判一下.那么我们考虑找恰好满足满足题目中的要求的区间[l,r][l,r][l,r],那么需要要 ...
- 快速了解AMD、CMD、CommonJS、ESM
1.ES6 Module javascript在ES2015(ES6)中出现了语言层面的模块(module). ES6的模块既可以用于浏览器端,也可以用于服务器端(nodeJS). ES6模块是静态化 ...
- I have Flash Player installed, but I am unable to view Flash content in Chromium. How do I enable Flash Player to view this content?
I have Flash Player installed, but I am unable to view Flash content in Chromium. How do I enable Fl ...