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利用div背景,做一个竖线的效果。
Nov 22 Javascript
javascript避免数字计算精度误差的方法详解
Mar 05 Javascript
深入探讨javascript中的数据类型
Mar 04 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
Mar 19 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
jQuery操作iframe中js函数的方法小结
Jul 06 Javascript
JS代码实现百度地图 画圆 删除标注
Oct 12 Javascript
Angular表单验证实例详解
Oct 20 Javascript
小程序云开发如何实现图片上传及发表文字
May 17 Javascript
js/jQuery实现全选效果
Jun 17 jQuery
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
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+XML 制作简单的留言本 图文教程
2009/11/02 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
PHP的password_hash()使用实例
2014/03/17 PHP
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
JavaScript函数详解
2014/11/17 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
原生JS和JQuery动态添加、删除表格行的方法
2015/05/28 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
JS创建对象的写法示例
2016/11/04 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
详解JQuery基础动画操作
2019/04/12 jQuery
javascript的this关键字详解
2019/05/20 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
JS实现分页导航效果
2020/02/19 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
布同 统计英文单词的个数的python代码
2011/03/13 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Python3爬虫全国地址信息
2019/01/05 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
会计学应届毕业生推荐信
2013/11/04 职场文书
运动会获奖感言
2014/02/11 职场文书
工作总结与自我评价
2014/09/18 职场文书
社区植树节活动总结
2015/02/06 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android