JavaScript基础-构造函数
1 构造函数:
- 构造函数就是一个普通的函数,创建方式和普通函数没有区别
- 不同的是构造函数名称的首字母我们习惯大写
- 构造函数和普通函数的调用方式不同,构造函数需要添加关键字new,而普通函数直接用函数名称调用。
我们可以看到,通过构造函数创建的对象名称不再是object了,而是Person对象和Cat对象,这样能更好的区分不同的对象。
2 构造函数的执行流程:
- 1.立刻创建一个新的对象
- 2.将新建的对象设置为函数中的this
- 3.逐行执行函数中的代码
- 4.将新建的对象作为函数返回值返回
还是上面的这个图,我们可以看到构造函数本身并没有返回值,但是我们在打印的时候,确得到了对象,说明在构造函数的执行过程中,第一件事就是立即创建新的对象(其实就是this),当打印的时候进行返回(因为此时函数中没有内容,所以整个过程是执行了1、2、4两步)
3 向构造函数中添加属性:
4 修改构造函数为工厂模式(提高复用性)
5 检查一个对象是否是某个构造函数的实例(检查对象是否所属某个类)
我们可以看到,persion1对象是Persion构造函数(工厂)创造的人。
persion1对象不是Cat构造函数(工厂)创造的猫。
注意,Object是所有类(构造函数)的祖先类,万物皆对象,所以不管是哪个构造函数创造的对象,都是Oject的子类。
6 优化构造函数-抽取构造函数中定义的方法到全局(提高复用性)
如图,红框中方法定义在构造函数中,那么每次new构造函数的时候,都会在内存中创建一个全新的hanshnu方法,我们可以将其提取到全局实现复用。
修改代码为:
注意:function Person(name.person,age)里不包含hanshu这个参数
我们可以看到执行效果和前面都是完全一样的,但是我们优化了内存。
注意:属性不要再优化到全局了,因为new Persion一次就是一个全新的对象(人),每个人的属性是不同的,而唯一相同的是hanshu这个方法,所以抽取的必须是所有对象共有的不能是每个对象专有的。