没有合适的资源?快使用搜索试试~ 我知道了~
javaScript面向对象概论1
需积分: 0 0 下载量 152 浏览量
2022-08-08
17:59:30
上传
评论
收藏 33KB DOCX 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/86344792/0001-059d8507f38427c3f928cbbf09bd2cde_thumbnail-wide.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
16页
javaScript面向对象概论1
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/86344792/bg1.jpg)
概论、范式与思想
在进行 ECMAScript 中的 OOP 技术分析之前,我们有必要掌握一些 OOP 基本的特征,并
澄清概论中的主要概念。
ECMAScript 支持包括结构化、面向对象、函数式、命令式等多种编程方式,某些情况下
还支持面向方面编程;但本文是讨论面向对象编程,所以来给出 ECMAScript 中面向对象
编程的定义:
ECMAScript 是基于原型实现的面向对象编程语言。
基于原型的 OOP 和基于静态类的方式直接有很多差异。 让我们一起来看看他们直接详细
的差异。
基于类特性和基于原型
注意,在前面一句很重要的一点已经指出的那样-完全基于静态类。 随着“静态”一词,我
们了解静态对象和静态类,强类型(虽然不是必需的)。
关于这种情况,很多论坛上的文档都有强调这是他们反对将在 JavaScript 里将“类与原型”
进行比较的主要原因,尽管他们在实现上的有所不同(例如基于动态类的 Python 和
Ruby)不是太反对的重点(某些条件写,尽管思想上有一定不同,但 JavaScript 没有变得
那么另类),但他们反对的重点是静态类和动态原型(statics + classes vs. dynamics +
prototypes),确切地说,一个静态类(例如:C + +,JAVA)和他的属下及方法定义的机
制可以让我们看到它和基于原型实现的准确区别。
但是,让我们来一个一个列举一下。 让我们考虑总则和这些范式的主要概念。
基于静态类
在基于类的模型中,有个关于类和实例的概念。 类的实例也常常被命名为对象或范例 。
类与对象
类代表了一个实例(也就是对象)的抽象。在这方面有点像数学,但我们一把称之为类型
(type)或分类(classification)。
例如(这里和下面的例子都是伪代码):
C = Class {a, b, c} // 类 C, 包括特性 a, b, c
![](https://csdnimg.cn/release/download_crawler_static/86344792/bg2.jpg)
实例的特点是:属性(对象描述 )和方法(对象活动)。特性本身也可视为对象:即属性
是否可写的,可配置,可设置的(getter/setter)等。因此,对象存储了状态 (即在一个
类中描述的所有属性的具体值),类为他们的实例定义了严格不变的结构(属性)和严格
不变的行为(方法)。
C = Class {a, b, c, method1, method2}
c1 = {a: 10, b: 20, c: 30} // 类 C 是实例:对象 с1
c2 = {a: 50, b: 60, c: 70} // 类 C 是实例:对象 с2,拥有自己的状态
(也就是属性值)
层次继承
为了提高代码重用,类可以从一个扩展为另一个,在加上额外的信息。 这种机制被称为
(分层)继承 。
D = Class extends C = {d, e} // {a, b, c, d, e}
d1 = {a: 10, b: 20, c: 30, d: 40, e: 50}
在类的实例上调用方的时候,通常会现在原生类本书就查找该方法,如果没找到就到直接
父类去查找,如果还没找到,就到父类的父类去查找(例如严格的继承链上),如果查到
继承的顶部还没查到,那结果就是:该对象没有类似的行为,也没办法获取结果。
d1.method1() // D.method1 (no) -> C.method1 (yes)
d1.method5() // D.method5 (no) -> C.method5 (no) -> no result
与在继承里方法不复制到一个子类相比,属性总是被复杂到子类里的。 我们可以看到子类
D 继承自父类 C 类:属性 a,b,c 是复制过去了,D 的结构是{a, b, c, d, e} } 。然而,方法
{method1, method2}是没有复制过去,而是继承过去的。 因此,也就是说如果一个很深
层次的类有一些对象根本不需要的属性的话,那子类也有拥有这些属性。
基于类的关键概念
因此,我们有如下关键概念:
1. 创建一个对象之前,必须声明类,首先有必要界定其类
2. 因此,该对象将由抽象成自身“象形和相似性”(结构和行为)的类里创建
3. 方法是通过了严格的,直接的,一成不变的继承链来处理
4. 子类包含了继承链中所有的属性(即使其中的某些属性是子类不需要的);
5. 创建类实例,类不能(因为静态模型)来改变其实例的特征(属性或方法);
![](https://csdnimg.cn/release/download_crawler_static/86344792/bg3.jpg)
6. 实例(因为严格的静态模型)除了有该实例所对应类里声明的行为和属性以外,是
不能额外的行为或属性的。
让我们看看在 JavaScript 里如何替代 OOP 模型,也就是我们所建议的基于原型的 OOP。
基于原型
这里的基本概念是动态可变对象。转换(完整转换,不仅包括值,还包括特性)和动态语
言有直接关系。下面这样的对象可以独立存储他们所有的特性(属性,方法)而不需要的
类。
object = {a: 10, b: 20, c: 30, method: fn};
object.a; // 10
object.c; // 30
object.method();
此外,由于动态的,他们可以很容易地改变(添加,删除,修改)自己的特性:
object.method5 = function () {...}; // 添加新方法
object.d = 40; // 添加新属性 "d"
delete object.c; // 删除属性 "с"
object.a = 100; // 修改属性 "а"
// 结果是: object: {a: 100, b: 20, d: 40, method: fn, method5: fn};
也就是说,在赋值的时候,如果某些特性不存在,则创建它并且将赋值与它进行初始化,
如果它存在,就只是更新。
在这种情况下,代码重用不是通过扩展类来实现的,(请注意,我们没有说类没办法改
变,因为这里根本没有类的概念),而是通过原型来实现的。
原型是一个对象,它是用来作为其他对象的原始 copy,或者如果一些对象没有
自己的必要特性,原型可以作为这些对象的一个委托而当成辅助对象。
基于委托
任何对象都可以被用来作为另一个对象的原型对象,因为对象可以很容易地在运行时改变
它的原型动态。
注意,目前我们正在考虑的是概论而不是具体实现,当我们在 ECMAScript 中讨论具体实
现时,我们将看到他们自身的一些特点。
例(伪代码):
剩余15页未读,继续阅读
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![epub](https://img-home.csdnimg.cn/images/20210720083646.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![js](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![vsix](https://img-home.csdnimg.cn/images/20210720083646.png)
![avatar](https://profile-avatar.csdnimg.cn/baa8c9d2c3d74c069b3c541430382b29_weixin_35801437.jpg!1)
萱呀
- 粉丝: 26
- 资源: 354
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 科大讯飞语音引擎 jar包 demo,科大讯飞语音合成引擎3.0,支持4.0系统以上,文字转语音输出.zip
- Java架构面试笔试专题资料及经验(含答案)SpringBoot面试Linux面试专题及答案 合集.zip
- 头歌c语言实验答案tion-model-for-ne开发笔记
- docker配置使用-model-for-networK开发demo
- docker配置使用vaWeb-mas笔记
- c语言连接两个字符串-mas开发笔记
- 俄罗斯引擎yandex进入x-master 笔记
- 头歌c语言实验答案el-for-network-ids-ma笔记
- 一个delphi写的连连看
- 植物大战僵尸-杂交版 最新版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0