web前端开发:js面向object

举报
zhousn 发表于 2020/08/09 22:21:06 2020/08/09
【摘要】 JavaScript 中的所有事物都是object:字符串、数字、数组、日期等。在JavaScript 中,object是拥有属性和方法的数据。

Everything is object ,任何类型的底层都是object,函数也不例外



两次层次:

(1) object是单个事物的抽象。

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

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

属性是object的状态,方法是object的行为(完成某种任务)。比如,我们可以把动物抽象为animal,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等)。

在实际开发中,object是一个抽象的概念,可以将其简单理解为:数据集或功能集

ECMAScript-262 把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数严格来讲,这就相当于说object是一组没有特定顺序的值。object的每个属性或方法都有一个名字,而每个名字都映射到一个值。

注意:每个object都是基于一个引用类型创建的,这些类型可以是系统内置的原生类型,也可以是开发人员自定义的类型。

什么是面向object

面向object不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性。


面向object编程 —— Object Oriented Programming,简称 OOP ,是一种编程开发思想。 它将真实世界各种复杂的关系,抽象为一个个对象,然后由object之间的分工与合作,完成对真实世界的模拟。

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

面向object与面向过程:

  • 面向过程就是亲力亲为,事无巨细,面面俱到,步步紧跟,有条不紊

  • 面向object就是找一个object,指挥得结果

  • 面向object将执行者转变成指挥者

  • 面向object不是面向过程的替代,而是面向过程的封装

面向object的特性:

  • 封装性

  • 继承性

  • [多态性]抽象

程序中面向object的基本体现

在 JavaScript 中,所有数据类型都可以视为object,当然也可以自定义object。 自定义的object数据类型就是面向对象中的类( Class )的概念。

我们以一个例子来说明面向过程和面向object在程序流程上的不同之处。

假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个对象表示:

var std1 = { name: 'Michael', score: 98 }
var std2 = { name: 'Bob', score: 81 }

而处理学生成绩可以通过函数实现,比如打印学生的成绩:

function printScore (student) {
 console.log('姓名:' + student.name + '  ' + '成绩:' + student.score)
}

如果采用面向object的程序设计思想,我们首选思考的不是程序的执行流程, 而是 Student 这种数据类型应该被视为一个object,这个object拥有 namescore 这两个属性(Property)。 如果要打印一个学生的成绩,首先必须创建出这个学生对应的object,然后,给object发一个 printScore 消息,让object自己把自己的数据打印出来。

抽象数据行为模板(Class):

function Student(name, score) {
 this.name = name;
 this.score = score;
 this.printScore = function() {
   console.log('姓名:' + this.name + '  ' + '成绩:' + this.score);
 }
}

根据模板创建具体实例object(Instance):

var std1 = new Student('Michael', 98)
var std2 = new Student('Bob', 81)

实例object具有自己的具体行为(给object发消息):

std1.printScore() // => 姓名:Michael  成绩:98
std2.printScore() // => 姓名:Bob  成绩 81

面向object的设计思想是从自然界中来的,因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。 Class 是一种抽象概念,比如我们定义的 Class——Student ,是指学生这个概念, 而实例(Instance)则是一个个具体的 Student ,比如, Michael 和 Bob 是两个具体的 Student 。

所以,面向object的设计思想是:

  • 抽象出 Class(构造函数)

  • 根据 Class(构造函数) 创建 Instance

  • 指挥 Instance 得结果

面向object的抽象程度又比函数要高,因为一个 Class 既包含数据,又包含操作数据的方法。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。