ES6 面向对象简介
面向对象:面向对象不是一种编程语言,他是一种编程思想,跟具体的语言无关
对比面向过程:
- 面向过程:思考的切入点是功能的步骤
- 面向对象:思考的切入点是对象的划分
面向对象不是说,我写的程序里面有对象就是面向过程,比如说C
语言,他也能模拟出一个类似于对象的结构体,并不是说他不能有对象而是说他思考的切入点是步骤而是从这个角度来思考程序的。
我们来拿把大象装进冰箱来举栗子
当我们面向过程时需要拆分他的步骤
我们在这里用伪代码来给大家开展示一下
function 第一步打开冰箱门() {
我们应该怎么做}
function 第二步把大象放进去() {
我们应该怎么做}
function 第三步关上冰箱门() {
我们应该怎么做}
在这里我们将整件事去拆分成一个一个步骤,以每一步去干什么,来作为整件事件的基准线。
当我们用面向对象的方式来写时
function 大象() {
这是个大象}
function 冰箱() {
这是个冰箱}
大象.proptype.他能走 = function () {
怎么走}
大象.proptype.他能被放进去 = function () {
怎么放进去}
大象.proptype.他能被拿出来 = function () {
怎么拿出来}
冰箱.proptype.他能开门 = function () {
怎么开门}
冰箱.proptype.他能关门 = function () {
怎么关门}
冰箱.proptype.他能制冷 = function () {
怎么制冷}
由此可见面向对象的方式不是去寻求步骤了,也不是不能有步骤,而是将对象按功能组件划分,不去找步骤,而是我需要什么去完成整个事件,用什么来完成。
在这里不是说面向对像好,面向过程不好,他们各有各的优点,在一些小型项目中面向过程,更加方便、便捷,比面向对象要好很多,而在大型项目中用面向对象的方法来编写会更加方便,这样更加条理分明,分工明确,此时面向过程的思路就有点捉襟见肘欧了。
类:构造函数语法糖
传统构造函数的问题
- 属性和原型方法定义分离,降低了可读性。
那么我们以前是怎么写的呢
//首先我们创建一个构造函数,构造器
function demo (type, name) {
this.type = type,
this.name = name
}
//再在函数的原型上加上方法(定义实例方法,原型方法)
demo.prototype.log = function () {
coansole.log('属