什么是面向对象?
- 把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。
- 对同类对象抽象出其共性,形成类。
- 类中的大多数数据,只能用本类的方法进行处理。
- 类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。
- 程序流程由用户在使用中决定。
理解面向对象
- 面向对象是相对面向过程而言。
- 面向对象和面向过程都是一种思想 面向过程,强调的是功能行为,关注的是解决问题需要哪些步骤。
- 面向对象将功能封装进对象,强调具备了功能的对象,关注的是解决问题需要哪些对象。
- 面向对象是基于面向过程的。
面向对象的四大特性
多态性、 继承性、 抽象性、 封装性
面向的对象的特点
- 将复杂的事情简单化。
- 面向对象将以前的过程中的执行者,变成了指挥者。
- 面向对象这种思想是符合现在人们思考习惯的一种思想。
JS中的面向对象
- Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类),注意是基于对象的语言,是一种弱类型语言
- 对象:属性与方法的集合
使用函数构造器构造对象:
// 构造器 Person 本身是一个函数对象
function Person( name ) {
this.name = name;
}
var p = new Person();
// 对象的隐式引用指向了构造器的 prototype 属性,所以此处打印 true
console.log( p.__proto__ === Person.prototype );
// 原型本身是一个 Object 对象,所以他的隐式引用指向了
// Object 构造器的 prototype 属性 , 故而打印 true
console.log( Person.prototype.__proto__ === Object.prototype );
// 构造器 Person 本身是一个函数对象,所以此处打印 true
console.log( Person.__proto__ === Function.prototype );
彻底理解原型链:
function Person( name ) {
this.name = name;
}
var p = new Person();
// 对象的隐式引用指向了构造器的 prototype 属性,所以此处打印 true
console.log( p.__proto__ === Person.prototype );
// 原型本身是一个 Object 对象,所以他的隐式引用指向了
// Object 构造器的 prototype 属性 , 故而打印 true
console.log( Person.prototype.__proto__ === Object.prototype );
// 构造器 Person 本身是一个函数对象,所以此处打印 true
console.log( Person.__proto__ === Function.prototype );