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中对对层的控制
Dec 29 Javascript
基于JQuery的Pager分页器实现代码
Jul 17 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
Jun 05 Javascript
jQuery简单实现网页选项卡特效
Nov 24 Javascript
JS实现5秒钟自动封锁div层的方法
Feb 20 Javascript
js中不同的height, top的区别对比
Sep 24 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
Jan 14 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
Apr 14 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
Dec 22 Javascript
ReactNative实现Toast的示例
Dec 31 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 Javascript
微信小程序-API接口安全详解
Jul 16 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
虫族 ZERG 概述
2020/03/14 星际争霸
php堆排序实现原理与应用方法
2015/01/03 PHP
PHP错误机制知识汇总
2016/03/24 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
接收键盘指令的脚本
2006/06/26 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
js计算精度问题小结
2013/04/22 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
20个常用Python运维库和模块
2018/02/12 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
python 实现list或string按指定分段
2019/12/25 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
武当山导游词
2015/02/03 职场文书
小学班级标语口号大全
2015/12/26 职场文书