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 相关文章推荐
JavaScript For Beginners(转载)
Jan 05 Javascript
jQuery中height()方法用法实例
Dec 24 Javascript
jQuery.prop() 使用详解
Jul 19 Javascript
EasyUI Tree树组件无限循环的解决方法
Sep 27 Javascript
vue中的自定义分页插件组件的示例
Aug 18 Javascript
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
移动端(微信等使用vConsole调试console的方法
Mar 05 Javascript
elementUI select组件默认选中效果实现的方法
Mar 25 Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
JS实现普通轮播图特效
Jan 01 Javascript
微信小程序webSocket的使用方法
Feb 20 Javascript
vue实现全屏滚动效果(非fullpage.js)
Mar 07 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
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
HTML上传控件取消选择
2013/03/06 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
前端微信支付js代码
2016/07/25 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
js实现简单进度条效果
2020/03/25 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
vue 解决provide和inject响应的问题
2020/11/12 Javascript
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
用python实现的线程池实例代码
2018/01/06 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
酒店公关部经理岗位职责
2013/11/24 职场文书
大学生创业计划书
2014/08/14 职场文书
2014年督导工作总结
2014/11/19 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python