JavaScript构造函数原理及实现流程解析


Posted in Javascript onNovember 19, 2020

在学习构造函数之前我们需要知道我们学习构造函数需要学习什么:

1.什么是构造函数

2.构造函数用来做什么

3.构造函数的执行过程

4.构造函数的返回值

1.所以首先我们需要知道什么是构造函数:

在我看来,构造函数具有两个特点可以判断是否为构造函数:

1.当函数名为首字母大写时,这个是一个可以大概判断构造函数与普通函数的一个特点,但是不是绝对正确,因为普通函数也可以是大写字母开头

2.当我们需要调用构造函数时我们需要new <构造函数>,也就是产生一个实例化对象。

function Student(name,age,sex,height){
      this.name=name;
      this.age=age;
      this.sex=sex;
      this.height=height;
    }
    //调用构造函数,也就是实例化一个对象。
    var p=new Student('luke',23,'nan',180)
    console.log(p);

控制台输出:

JavaScript构造函数原理及实现流程解析

可以看出输出的是一个对象

2.构造函数是用来做什么的:

1.当我们平时创建对象时可能会用如下创建对象的方式来创建,上代码:

//用创建对象方式来创建
     var stu1={name:'zs',age:20,sex:"male",height:186};
     var stu2={name:'ls',age:21,sex:"male",height:180}
     var stu3={name:'ww',age:22,sex:"female",height:156}
     var stu4={name:'jx',age:23,sex:"female",height:165}
     var stu5={name:'xf',age:24,sex:"male",height:180}

2.当我们用构造函数来创建这个对象时:

//用构造函数来创建对象
    function Student(name,age,sex,height){
      this.name=name;
      this.age=age;
      this.sex=sex;
      this.height=height;
    }
     var stu1=new Student('zs',20,"male",186);
     var stu2=new Student('ls',21,"male",180);
     var stu3=new Student('ww',22,"female",156);
     var stu4=new Student('jx',23,"female",165);
     var stu5=new Student('xf',24,"male",180);

这样看起来是不是要简洁的多呢,这里因为只有五个人,要是五六十个就会看出明显效果

3.构造函数的执行过程

在前面我们知道了构造函数是什么,和其作用,也通过代码来看出了构造函数的作用。那我现在我们需要知道构造函数的执行过程,因为学习一个东西我们需要学习其原理,而不是其表面

所以接下来我就来讲一讲构造函数的执行过程:

在之前我们都知道,要调用构造函数我们需要在其前面加一个new关键字,所以主要就是new在其作用,在执行new关键字后,很明显,他跟以往的函数调用就不同了,他会依次执行以下步骤:

1.new过后会产生一个空对象,作为一个返回的对象实例

2.将空对象的原型指向了构造函数的prototype属性

3.将空对象的值赋值给构造函数里面的this值

4.开始执行构造函数里的代码

4.构造函数的返回值

知道了其执行过程,显而易见,new关键字创建的实例对象为构造函数的返回值。

其实这是不对的,哈哈。

返回值需要分情况来定:

1.当函数中没有return来返回值的时候,会返回this,也就是实例化对象。就像在说2.构造函数有什么作用时说的一样

2.当函数中return中返回一个复杂类型数据的时候,构造函数会返回这个复杂类型数据,上代码:

function Student(name,age,sex,height){
      this.name=name;
      this.age=age;
      this.sex=sex;
      this.height=height;
      return {name:'fanhui',weight:60}
    }
     var Stu1=new Student('zs',20,"male",186);
     console.log(Stu1);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
简单的两种Extjs formpanel加载数据的方式
Nov 09 Javascript
node.js中的fs.close方法使用说明
Dec 17 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
Sep 17 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
Jquery和JS获取ul中li标签的实现方法
Jun 02 Javascript
详细谈谈AngularJS的子级作用域问题
Sep 05 Javascript
javascript基本数据类型和转换
Mar 17 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
Mar 21 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
AngularJS 表单验证手机号的实例(非必填)
Nov 12 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
Dec 10 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
Feb 21 Javascript
javascript this指向相关问题及改变方法
Nov 19 #Javascript
JavaScript实现alert弹框效果
Nov 19 #Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 #Vue.js
如何使用 vue-cli 创建模板项目
Nov 19 #Vue.js
原生js实现自定义消息提示框
Nov 19 #Javascript
原生js实现点击按钮复制内容到剪切板
Nov 19 #Javascript
jQuery-App输入框实现实时搜索
Nov 19 #jQuery
You might like
PHP对字符串的递增运算分析
2010/08/08 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
让 python 命令行也可以自动补全
2014/11/30 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
新西兰优惠网站:Treat Me
2019/07/04 全球购物
授权收款委托书
2014/09/23 职场文书
工程承包协议书范本
2014/09/29 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
Python采集股票数据并制作可视化柱状图
2022/04/04 Python