JS构造函数_Suda Masaki534
含义:在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。构造函数首字母一般大写
(我的理解是:构造函数是用来创建一个对象的,所有的对象都是被new 构造函数()出来的,只要一个函数(内置、自定的),通过new被调用的 这个函数就可以被叫做构造函数)
一、构造函数的优点:
在语法上提供一个简洁的书写方式,为了开发者的便利
举个例子:
如果我们想录入班上同学的个人信息,会这样创建对象
var m1 = { name: '张三', age: 21, sex: '男', hobby: 'basketball' };
var m2 = { name: '李四', age: 20, sex: '女', hobby: 'dancing' };
var m3 = { name: '王五', age: 22, sex: '女', hobby: 'singing' };
var m4 = { name: '赵六', age: 23, sex: '男', hobby: 'football' };
但是如果人数过多,最终我们要将以上代码编写n次,效率过低,所以这时候我们可以运用构造函数,将name、age、sex、hobby当做构造函数的参数传递进去。
function Msg(name, age, hobby, sex) {
//new关键字帮助我们做了一系列的事
// 1.在函数内部创建了一个空对象
// 2.在函数中的this指向这个空对象 this-》 {}Obj
// 3.逐条执行函数中的代码
// 4.隐式返回这个对象
//obj.name = name->{name:'张三'}
this.name = name;
//obj.age = name->{name:'张三',age:'21'}
this.age = age;
//obj.hobby = name->{name:'张三',age:'21',hobby:'basketball'}
this.hobby = hobby;
//obj.sex = name->{name:'张三',age:'20',hobby:'basketball',sex:'女'}
this.sex = sex;
}
?当创建上面的函数以后, 我们就可以通过 new 关键字调用,也就是通过构造函数来创建对象了。
var m1= new Msg('张三', '21', 'basketball', '男');
var m2= new Msg('李四', '20', 'dancing', '女');
var m3= new Msg('王五', '22', 'singing', '女');
var m4= new Msg('赵六', '23', 'football', '男');
console.log(m1); //object对象 {} 空对象 var obj ={}
console.log(m2);
console.log(m3);
console.log(m4);
?此时创建对象会变得非常方便,虽然封装构造函数的过程会比较麻烦,但一旦封装成功,我们再创建对象就会变得非常轻松,这也是我们为什么要使用构造函数的原因。
二、构造函数执行过程
function Flower(color) {
this.color = color;
this.price = price;
}
当一个函数创建好以后,我们并不知道它是不是构造函数,即使像上面的例子一样,函数名为大写,我们也不能确定。只有当一个函数以 new 关键字来调用的时候,我们才能说它是一个构造函数。
所以我们总结一下:
(1) 当以 new 关键字调用时,会创建一个新的内存空间,标记为 Animal 的实例。
(2)函数体内部的 this 指向该内存
var rose = new Flower("red",'50'); //创建一个新的内存 #one
var yellowrose = new Flower("yellow",'40'); //创建一个新内存 #two
var last= new Flower("pink",'30'); //创建一个新内存 #three
?每当创建一个实例的时候,就会创建一个新的内存空间(#one, #two),创建 #one 的时候,函数体内部的 this 指向 #one, 创建 #two 的时候,函数体内部的 this 指向 #two。
(3) 执行函数体内的代码
通过上面的讲解,你就可以知道,给 this 添加属性,就相当于给实例添加属性。
(4) 默认返回 this
由于函数体内部的this指向新创建的内存空间,默认返回 this ,就相当于默认返回了该内存空间,也就是上图中的 #three。此时,#three的内存空间被变量last所接受。也就是说 last这个变量,保存的内存地址就是 #three,同时被标记为 Flower的实例。
以上就是构造函数的整个执行过程。
相关文章
- Apache Doris1.0版本集群搭建、负载均衡与参数调优_Mumunu-_apache doris搭建
- 前端食堂技术周刊第 52 期:Babel 7.19.0、Fresh 1.1、React Native 0.70、新的 Web 性能指标 INP_童欧巴
- 【游戏开发指路】Unity学习路线,三万字大纲(面试题大纲 | 知识图谱 | Unity游戏开发工程师)_林新发_游戏开发学习路线
- HCIA/HCIP使用eNSP模拟超大型组网配置综合实验(链路聚合 二层交换机 三层交换机Vlanif 三层路由器 VLAN OSPF 静态路由 STP RSTP MSTP的综合应用)_skawngu
- Apple M1安装React Native全过程_-阿布-_m1 安装react
- 如何用python制作炫酷的个人足迹地图?_小熊猫爱恰饭
- python pytest setupclass_python pytest进阶之fixture详解_爱卡汽车
- 摸鱼也有效率??8个python自动化脚本提高打工人幸福感~_小熊猫爱恰饭
- 记一次keepalived VIP漂移后VIP不能访问的故障_龙跃丶_keepalived vip无法访问
- SLB负载均衡配置_雾山雨巫_slb负载均衡配置
- python的scrapy爬虫模块间进行传参_Python爬虫第八天:ScrapyShell|yield item和请求传参..._雪中阳
- Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作_Heiko-Android_camerax
- Android Studio中ListView的使用方法2-1_棉猴_android studio列表控件
- 解决办法:AndroidStudio升级到android-studio-2021.3.1.16-windows.exe的坑_慢羊羊的快发明
- Android Studio安装sdk失败,无法勾选sdk。无法下载gradle_熊林顿蹲_androidstudio无法下载sdk
- 解决虚拟机VM-开启 虚拟化 Intel-VT-x/EPT 或 AMD-V/RVI(V) 后 电脑蓝屏重启 或显示此平台不支持虚拟化的问题 (Win10)_Echo.斜杠青年_虚拟机开启虚拟化