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 相关文章推荐
JQuery Ajax通过Handler访问外部XML数据的代码
Jun 01 Javascript
css值转换成数值请抛弃parseInt
Oct 24 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
Apr 12 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
May 18 Javascript
node.js调用C++开发的模块实例
Jul 03 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
Mar 18 Javascript
关于js原型的面试题讲解
Sep 25 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
Mar 01 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
Oct 30 Javascript
Vuex 进阶之模块化组织详解
Jan 12 Javascript
node前端模板引擎Jade之标签的基本写法
May 11 Javascript
Node.js API详解之 V8模块用法实例分析
Jun 05 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工厂模式
2014/11/25 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
小议javascript 设计模式 推荐
2009/10/28 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
详解Django中的过滤器
2015/07/16 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
python numpy 按行归一化的实例
2019/01/21 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
企业安全标语
2014/06/07 职场文书
个人委托书范本
2014/09/13 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
新生开学寄语大全
2015/05/28 职场文书
教师培训学习心得体会
2016/01/21 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA
Python使用pyecharts控件绘制图表
2022/06/05 Python