博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学JS的心路历程-JS支持面向对象?(一)
阅读量:6036 次
发布时间:2019-06-20

本文共 1194 字,大约阅读时间需要 3 分钟。

昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗?

便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧()!

 

首先面向对象有三大特色,封装、继承及多态,这三个都是抽象的概念。

 

其中继承这个抽象的概念,是为了避免多个类别间重复定义了相同行为与实作。基本上有两种实作的方式可以实现,「原型继承」与「类别继承」。

 

这两者分别的特色如下。

 

类别继承classical inheritance:

可以从同一个类别(class)中实例多个物件。

 

可以将类别组织成层次结构,进而重覆使用代码。

 

常用的代码(More general code)将会储存在高阶的类别,由低阶的类别继承。

什么是常用的代码?举例来说,如果今天有两只不同品种的狗,但是叫声都是一样的,那我们便会把叫声储存在高阶的类别:

 

public class dog {

public String voice =“wong!”;

}

public class GoldenRetriever extends dog {

public String color =“gold”;

}

意味者物件与其它物件共享相同类别及父类别。

 

建立物件的时候,会需要先写出一个物件的类别(Class),然后,才利用这个类别来建立包含数据的物件,物件受限于类别而无法即时新增属性和方法。

 

Java或C++的继承是在定义类别时指定要继承的类别来当作父类别(SuperClass)

 

原型继承prototypal inheritance

物件直接继承其他物件,没有所谓的类别,需要物件就直接写一个()。

 

物件利用层级结构连接在一起,所以仍然可以重复使用。

 

每个物件都跟创建它的物件有秘密连接,这形成一个链。

 

物件被呼叫自己没有的属性时,它的父层将被呼叫,不断往上找直到找到或到达根物件为止。

 

继承是经由指定物件的Prototype物件来达成的。

 

可以在建立后的任何时间,透过Prototype属性来指定要继承的物件

 

只要被继承的物件新增属性或方法,继承的物件也可以马上使用这些新增的属性和方法

 

方法和属性可以动态新增,因此,弹性会比需要定义类别式的语言来得大,但是,相对的,程序结构就比较不严谨,也比较容易发生执行时期的错误!

 

所以在JS中的每个函式(他们都是物件),实际上都有一个prototype的成员,负责在被呼叫物件时提供。

拥有这个成员允许了建构式的运作。

 

将属性新增至函式物件的prototype可使它被使用于建构式的物件,以及从这建构式继承的物件。

JS的原型继承是继承这个抽象概念的实现方式的一种。

 

以上就是关于两种继承的比较,如果有错误及来源为附上欢迎留言指正,那么我们明天见()!

转载于:https://www.cnblogs.com/lannyQ-Q/p/10011406.html

你可能感兴趣的文章
反射操作公共成员变量
查看>>
Android热修复升级探索——代码修复冷启动方案
查看>>
学校宿舍的深夜之思考
查看>>
VB.NET 生成DBF文件
查看>>
编译安装nginx 1.9.15
查看>>
我的友情链接
查看>>
新的开始~~~
查看>>
字符串的扩展
查看>>
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
四 指针与数组 五 函数
查看>>
硬盘空间满了
查看>>
dutacm.club Water Problem(矩阵快速幂)
查看>>
深入JVM内核--GC算法和种类
查看>>
iOS的AssetsLibrary框架访问所有相片
查看>>
MySQLdb的安装
查看>>
读书笔记三
查看>>
数论 - 最小乘法逆元
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>