1.什么是面向对象编程
面向对象是对面向过程的高度封装,把所有的属性都放在构造函数内,把方法都放在原型里面。
2.创建对象的几种方式
1.对象字面量的形式 2.new一个对象 3.工厂函数 4.构造函数
构造函数的特点 :函数名需要大写,函数内部有this,函数没有返回值
构造函数创建对象的步骤:1.首先在内存当中创建一个新的空对象 2.让this指向这个对象 3.执行函数体内的代码 4.返回一个新的对象
检测对象是是否是特定类的实例 运用到instanceof运算符,通过返回一个布尔值来判断这个对象是否是这个特定类创建的实例对象
3.原型
每一个函数内部都有一个prototype原型属性,这个属性是一个对象,每一个原型都有一个constructor属性记录着创建实例对象的构造函数,每一个由构造函数创建出来的实例对象都有一个非标准_proto_属性指向原型,所有实例对象都直接或者间接的继承了原型对象的成员。实例对象可以直接访问原型对象的成员。
4.属性成员的搜索原则(这是为什么实例对象可以直接访问原型对象成员的原因)
搜索首先从实例对象本身开始,如果实例对象本身有这个属性那么就返回这个属性值,如果实例对象本身没有这个属性,就到原型对象里面去查找有没有这个属性成员,如果在原型对象当中找到这个属性,那么就返回这个属性值。如果没有找到继续沿着原型链查找,原型链上没有找到最终会返回一个undifined值
5.实例对象属性和方法的修改
修改实例对象的相关属性的值,或者给实例对象添加相关的属性,都不会对原型产生影响
引用类型也就是方法的修改,首先实例对象会在本身查找有没有这个方法,有就修改,没有就到原型链上面去查找,在原型上面查找到之后就进行修改。
6.原型对象的使用建议
私有成员放在构造函数里面,
共有成员放到原型对象里面,
修改了原型对象的constructor属性之后一定要手动修改constructor的指向
7.静态成员和实例成员
静态成员:不能使用对象的方式来调用,必须使用构造函数来调用
实例成员:跟对象相关的成员,使用对象的方式调用
8.继承
继承的目的:把子类型的共有部分提取到父类型当中,实现了代码的重用,减少了代码的冗余
借用构造函数继承,原型对象继承,组合继承(包括了借用构造函数继承和原型对象继承)
通过call借用构造函数实现属性继承,通过原型对象实现方法的继承
原型继承:把父类型的实例对象赋值给子类型的原型,然后手动修改子类型原型当中构造器的指向,把父类型的实例对象而不是父类型的原型对象赋值给子类型原型的原因是当给子类型添加方法的时候,这个方法是该子类型所特有的不会影响到父类型。
9.对象的拷贝:浅拷贝和深拷贝
对象的浅拷贝:简单数据类型的拷贝
对象的深拷贝:复杂数据类型的拷贝(对象,数组,函数等),需要用到函数的递归
网友评论