深入理解js中的面向对象与原型、原型链(一)

2019-05-28  本文已影响0人  缺月楼

1、对象是什么?

面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。

每一个对象都是功能中心,具有明确分工,可以完成接受信息、处理数据、发出信息等任务。对象可以复用,通过继承机制还可以定制。因此,面向对象编程具有灵活、代码可复用、高度模块化等特点,容易维护和开发,比起由一系列函数或指令组成的传统的过程式编程(procedural programming),更适合多人合作的大型软件项目。

那么,“对象”(object)到底是什么?我们从两个层次来理解。

(1)对象是单个实物的抽象。

一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。

(2)对象是一个容器,封装了属性(property)和方法(method)。

属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等)。
上面这一段是大佬阮老师对面向对象的描述,不理解的同学可以看一下我下面举得简单的例子:
面向对象的思路在我们生活中实际上很普遍。以开车为例,开车时司机拧钥匙、挂挡、踩油门,车开始启动

面向过程的写法

拧钥匙()
联通电路()
火花塞点火()
活塞运动()
内燃机启动() 
司机挂挡()
变速箱工作()
踩油门()
活塞运动加快()
刹车解除()
连杆传输动力到轮子()
轮子运转()

看起來,步骤很繁琐,很复杂!

而面向对象的思路:一次性实现所有的流程
你可以这样操作:

Car.拧钥匙()
Car.挂挡()
Car.踩油门()

是不是简单了很多,
面向对象的思路:把某个功能看成一个整体(对象),通过调用对象的某个方法来启动功能。在用的时候不去考虑这个对象内部的实现细节,在去实现这个对象细节的时候不用管谁在调用

面向对象的写法不仅更简洁,而且更可控。假设有两个车要启动,用面向过程的写法代码无法维护,而面向对象只需要:

Car1.拧钥匙()
Car1.挂挡()
Car1.踩油门() 
Car2.拧钥匙()
Car2.挂挡()
Car2.踩油门()

这样写真的便于维护,各个功能之间互不干扰,降低耦合!

JS 中的对象

js对象是一系列key:value的几何 例:

var obj = { a: 1, b: 2}
var person = {
    name: 'hunger',
    sayName: function(){
        console.log('My name is hunger')
    }
}

我们可以通过对象.属性来获取对应属性的值!

console.log(person.name)
person.sayName()

但假设我们定义一个函数

    return a + b
}

console.log(sum.name)   // => sum
console.log(sum.length)  //2

会发现,函数 sum也有很多属性。
从这个角度看,函数也是js对象的一种。
未完待续..........

本文参考 : 阮一峰 饥人谷若愚

上一篇 下一篇

猜你喜欢

热点阅读