JavaScript学习笔记(二十四)——构造函数

什么是构造函数?

在JavaScript中,使用new关键字来调用的函数,称为构造函数

构造函数首字母一般大写。

为什么使用构造函数?

先来看一个例子:我们需要录入每个人的信息,那么按照之前的做法,可以将每个人的信息放到对象里面,比如:

let p1 = {name: "张三", age: 18, sex: "男"};
let p2 = {name: "李婉", age: 16, sex: "女"};
let p3 = {name: "王五", age: 20, sex: "男"};

像上面的做法,我们可以把每个人的信息当做一个对象来处理。但是,会发现有很多代码是重复的,如果需要录入100个人的信息,你们就会重复写100次。那么,此时构造函数的优势就体现出来了。

观察上面的代码,我们发现,每个人都有name、age、sex属性,只是它们的值不同,那我们就把这些属性当做构造函数的参数传递进去。此时,我们就哭创建以下函数:

function Person(name, age, sex){
	this.name = name;
	this.age = age;
	this.sex = sex;
}

当创建完上面的Person函数后,使用new关键字调用,也就是通过构造函数来创建对象。

let p1 = new Person("张三", 18, "男");
let p2 = new Person("李婉", 16, "女");
let p3 = new Person("王五", 20, "男");

此时,发现使用构造函数创建对象简单了很多。所以,虽然封装构造函数的过程会比较麻烦,但是一旦封装成功,我们调用就非常方便,这就是为什么使用构造函数的原因。

在使用对象字面量创建一系列同类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复代码,而使用构造函数就可以实现代码的复用

构造函数执行过程

1、当以new关键字调用时,会创建一个新的内存
2、函数体内的this指向该内存
3、执行函数体代码
4、默认返回this

例如:

function Person(name, age, sex){
	this.name = name;
	this.age = age;
	this.sex = sex;
}
let p1 = new Person("张三", 18, "男");

当使用new关键字调用时,第一步会在内存中开辟一个内存空间,标记为Person的实例p1。第二步是函数体内的this指向的是刚开辟的内存空间。第三步是执行函数体代码,给this添加属性,就相当于给实例p1添加属性。第四步就是返回this,由于函数体内部的this指向新开辟的内存空间,默认返回 this ,就相当于默认返回了该内存空间。此时,内存空间被变量p1所接受。也就是说 p1 这个变量,保存的内存地址就是新开辟的内存空间,同时被标记为 Person 的实例。

以上就是构造函数的整个执行过程。

构造函数的返回值

上面我们提到函数执行的最后一步是默认返回this,言外之意就是构造函数的返回值还有其他情况。

1、没有手动设置返回值,默认返回this

function Person1() {
 this.name = 'zhangsan';
}

var p1 = new Person1();

此时返回值其实是

p1: {
	name: "zhangsan"
}

2、手动添加一个基本数据类型的返回值,最终还是返回this

function Person2() {
 this.age = 28;
 return 50;
}

var p2 = new Person2();
console.log(p2.age);   // 28

此时返回值其实是

p2:{
	age: 28
}

如果上面是一个普通函数的调用,那么返回值就是 50。

3、手动添加一个引用类型的返回值,最终返回该引用类型

function Person3() {
 this.height = '180';
 return ['a', 'b', 'c'];
}

var p3 = new Person3();
console.log(p3.height);  // undefined
console.log(p3.length);  // 3
console.log(p3[0]);      // 'a'

再来看一个例子

function Person4() {
  this.gender = '男';
  return { gender: '中性' };
}

var p4 = new Person4();
console.log(p4.gender);  // '中性'

构造函数首字母必须是大写吗?

大小写都可以,但是一般使用首字母大写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值