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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
JavaScript继承方式实例
Oct 29 Javascript
js计算精度问题小结
Apr 22 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
Dec 24 Javascript
聊一聊JS中的prototype
Sep 29 Javascript
jQuery中animate的几种用法与注意事项
Dec 12 Javascript
Vue.js开发环境快速搭建教程
Mar 17 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
分析JS中this引发的bug
Dec 12 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 Javascript
JavaScript字符串处理常见操作方法小结
Nov 15 Javascript
vue 实现用户登录方式的切换功能
Apr 14 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
B2K与车机的中波PK
2021/03/02 无线电
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
php实现生成验证码实例分享
2016/04/10 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
python中assert用法实例分析
2015/04/30 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
对python 命令的-u参数详解
2018/12/03 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
大学四年规划书范文
2013/12/27 职场文书
中考冲刺决心书
2014/03/11 职场文书
党建示范点实施方案
2014/03/12 职场文书
企业形象策划方案
2014/05/29 职场文书
个人简历求职信范文
2015/03/20 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
消防安全培训工作总结
2015/10/23 职场文书
如何用python反转图片,视频
2021/04/24 Python
详解Vue的列表渲染
2021/11/20 Vue.js