第四章
对象
- 回顾数据类型
- number(数值类型)
- string(字符串类型)
- boolean(布尔类型)
- null(空类型)
- undefined(未定义类型)
- object
- 一种复杂的数据类型,该类型实例化的对象是一组数据和功能的集合
- 对象的理解
- 对象是包含相关属性和方法的集合体,而面向对象只是一个概念或编程思想,它不应该依赖于某个语言存在
- 创建对象
- 自定义对象
- 与Java中一样,使用操作符new创建一个object的实例,然后通过“.”为其添加属性和方法
- 语法
- var 对象名称 = new Object();
- 示例
- 内置对象
- JavaScript的内置对象是一种特殊数据
- 常见的内置对象:
- String(字符串)对象
- Date(日期)对象
- Array(数组)对象
- Boolean(逻辑)对象
- Math(算数)对象
- RegExp(正则表达式)对象
- 自定义对象
构造函数和原型对象
- 构造函数
- 构造函数可用来创建特定类型的对象
- 语法
- function 构造函数方法名(【参数列表】){
- 具体的方法属性
- }
- function 构造函数方法名(【参数列表】){
- 示例
- 注意
- 构造函数方法名大写,以此来区分普通方法
原型对象
- 原理
- 每一个函数都有一个prototype属性,指向的是原型对象,通过原型对象,可以让
特定类型的所有实例共享属性和方法
- 每一个函数都有一个prototype属性,指向的是原型对象,通过原型对象,可以让
- 实例
- 概念
- Flower作为构造函数,拥有prototype属性,指向Flower.prototype,即
Flower的原型对象,每个原型对象均有constructor指针,指向Flower构造函
数,每一个Flower实例对象都有一个_proto_指针,指向Flower的原型对象
- Flower作为构造函数,拥有prototype属性,指向Flower.prototype,即
- 概念
继承
- 原型链
- 概念
- 一个原型对象是另一个原型对象的实例,相关的原型对象层层递进,就构成了实例与原型的链条,就是原型链
- 案例图
- 如图,举例,如猫既是原型对象,也是实例,只是选择的参照物不同。相对于黑猫而言,猫是黑猫的原型对象;相对于哺乳动物而言,猫是哺乳动物的实例
- 如图,举例,如猫既是原型对象,也是实例,只是选择的参照物不同。相对于黑猫而言,猫是黑猫的原型对象;相对于哺乳动物而言,猫是哺乳动物的实例
- 概念
- 原型链图
- 分析:
- man1作为实例,拥有_proto_指针,指向Man的原型对象;Man的构造函数有prototype指针,指向Man的原型对象;
- Man的原型对象以Human的实例作为原型,因而具有_proto_指针,指向Humans的原型对象
- Humans的构造函数有prototype指针,指向Humans的原型对象;Humans的原型对象有constructor指针,指向Humans构造函数
- 如图
- 如图
- 借用构造函数
- 解决原型链模型下,所有对象共用同一份属性的问题
- 语法
- 方法1:apply([thisOjb[,argArray]])
- 方法2:call([thisObj[,arg1[,arg2[, [,argN]]]]])
- 方法描述均为:应用某一对象的一个方法,用另一个对象替换当前对象
- 语法案例
- 案例1:借用父类无参构造函数
- 如图
- 案例2:借用父类有参构造函数
- 如图
- 分析:
- 组合继承(核心)