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 相关文章推荐
JS正则表达式大全(整理详细且实用)
Nov 14 Javascript
简介JavaScript中valueOf()方法的使用
Jun 05 Javascript
jQuery实现form表单元素序列化为json对象的方法
Dec 09 Javascript
详解Bootstrap插件
Apr 25 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
Apr 26 Javascript
详解AngularJS中ng-src指令的使用
Sep 07 Javascript
最常用的jQuery表单验证(简单)
May 23 jQuery
js解决软键盘遮挡输入框的问题分享
Dec 19 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
May 28 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
vue实现列表滚动的过渡动画
Jun 29 Javascript
关于angular 8.1使用过程中的一些记录
Nov 25 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版(5)
2006/10/09 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
JavaScript类库D
2010/10/24 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
vue.js表格分页示例
2016/10/18 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
video.js使用改变ui过程
2017/03/05 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Python基于select实现的socket服务器
2016/04/13 Python
python数据结构之列表和元组的详解
2017/09/23 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
python实现求最长回文子串长度
2018/01/22 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
学生学习总结的自我评价
2013/10/22 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
奖学金个人总结
2015/03/04 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL
python用tkinter开发的扫雷游戏
2021/06/01 Python
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python