面向对象
面向对象概念
对象:万物皆对象
1、属性: 特点、特征、特性 变量 名词
2、方法:功能 函数 动词
编程方式:过程化(面向过程编程) 面向对象编程
对象的创建
1、因为系统内置对象的个数是有限的,所以需要自定义对象
2、创建对象方法
1)字面量形式创建对象:
简单易懂,但不利于批量创建对象,无法解决对象的识别问题。
2)实例创建对象:
简单易懂,但不利于批量创建对象,无法解决对象的识别问题。
3)工厂模式创建对象:
可以批量创建对象,无法解决对象的识别问题。
4)构造函数创建对象:
能改批量创建对象,能解决对象识别问题,构造函数是最常用的一种方法
缺点:会为每一个对象新增方法,浪费内存
5)原型方式创建对象:
原型:是函数的一个属性(自身又是一个对象),原型中的内容对所有的对象实例都是共享的
对象实例属性:proto 指向对象的原型
console.log(p.protoPerson.prototype);
constructor:原型对象的构造器,指向构造函数自身
console.log(Person.prototype.constructorPerson);;
只在原型中添加公有方法,很少添加属性
6)混合模式创建对象:
构造函数+原型 理想的创建对象的方案(重点掌握)
缺点:属性和方法声明没有在一起,有割裂感
7)动态混合模式创建对象
四、命名空间
随着代码量的增大,会出现名称相同的变量,就可以使用命名空间来解决
//命名空间
var obj = {};
obj.offcn = {};
obj.miss = {};
obj.cts = {};
obj.offcn.getInfo = function () {
alert('a');
};
obj.miss.getInfo = function () {
alert('b');
};
obj.cts.getInfo = function () {
alert('c');
};
// obj.offcn.getInfo();
obj.miss.getInfo();
五、apply和call
在ES5中,this指向的是调用者
apply和call方法可以改变函数内this的指向
apply(obj,参数列表)
参数列表:obj是一个对象,它将会替代函数内的this ;参数列表,函数自身的参数
call(obj,参数列表)
参数说明:obj是一个对象,它将会替代函数内的this ;参数列表,函数自身的参数
** 相同点:都能改变函数内this的指向
不同点:参数列表不同,apply需要将参数封装为数组传递,call方法普通传递**
// show.call(document.body,20,30);
// show.apply(document.body,[30,40]);
六、继承
1)原型链继承:
将父类的对象实例赋值子类的原型
查找的顺序,自己实例对象—>构造函数—>原型—>父类型的实例对象—>父类型构造函数—>父类型原型。由于此种继承是通过原型的关系完成的,又称为:原型链继承
问题:子类无法传递参数