当先锋百科网

首页 1 2 3 4 5 6 7

http://www.renfed.com/2017/05/21/js-oop/?utm_source=tuicool&utm_medium=referral

1. 什么是面向对象?

—首先,面向对象并不是说你写一个class就是面向对象了。在Java里面Everything is class,全部都是Class,还有React也需要写class,所以很多人写class并不是他自己要写class,而是编程语言或者框架要求他写class。因此就会存在一个窘境,如下图所示:

虽然是写的class,但是代码风格是面向结构的,只是套了一个class的外衣,真正面向对象的是所使用的框架。

—所以面向对象应该是一种思想,而不是你代码的组织形式,甚至有时候你连一个class都没写。

面向对象的英文为Object Oriented,它的准确翻译应该为“面向物件”,而不是“面向对象”,只不过不知道是谁翻译了这么一个看似“高大上”但是不符合实际的名词。面向对象是对世界物件的抽象和封装,例如车子、房子和狗等。

2. 面向对象的特点

面向对象有三个主要的特点:封装、继承和多态。

(1)封装

现在我要研究下狗,并且关注它的叫和咬人行为,所以我封装了一个狗的类,如下代码所示:

上面代码封装两个行为:叫、咬人,和一个属性:年龄。

(2)继承

然后我又要研究下哈士奇,如下图所示:

哈士奇是狗的一种,我让它继承了Dog这个类,于是它就继承了父类的行为,如它可以咬你:

同时,哈士奇它有自己的行为,例如它可能时不时就会露出奇怪的表情。

(3)多态

哈士奇也会叫,但是它不是“汪汪汪”地叫,它有时候会发出像狼嚎的声音,所以同样是叫的行为,但是哈士奇有自己特点,这个就是多态,如下所示:

当调用Husky的bark函数时就是wolf wolf而不是wang wang了:

3. 面向对象的实际例子

(1)上传进度条

一个页面会有多个上传图片的地方,每个上传地方都会生成一个进度条,如下图所示:

所以考虑把进度条封装成一个类ProgressBar,如下代码所示: