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 call方法使用说明
Jan 11 Javascript
基于JQuery的日期联动实现代码
Feb 24 Javascript
JavaScript splice()方法详解
Sep 22 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
Apr 17 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
JavaScript学习笔记之Cookie对象
Jan 22 Javascript
Jquery跨域获得Json的简单实例
May 18 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
Jun 22 Javascript
ES10 特性的完整指南小结
Mar 04 Javascript
react组件基本用法示例小结
Apr 27 Javascript
vue - props 声明数组和对象操作
Jul 30 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中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
设定php简写功能的方法
2019/11/28 PHP
javascript Prototype 对象扩展
2009/05/15 Javascript
JavaScript 学习笔记(五)
2009/12/31 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
原生JavaScript实现轮播图
2021/01/10 Javascript
python 获取et和excel的版本号
2009/04/09 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
django框架auth模块用法实例详解
2019/12/10 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
python中pow函数用法及功能说明
2020/12/04 Python
房屋租赁协议书范本
2014/04/10 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
大学计划书范文800字
2014/08/14 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
优秀教师先进材料
2014/12/16 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
小学作文之描写天气
2019/08/15 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
Python 线程池模块之多线程操作代码
2021/05/20 Python
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis