javascript是一种面向对象语言吗?如果是,您在javascript中是如何实现继承的呢
·oop(面向对象程序设计)中最常用到的概念有
1、对象,属性,方法
1》(对象:具体事物或抽象事物,名词)
2》(属性:对象的特征,特点,形容词)
3》(方法:对象的动作,动词)
2、类
1》 在现实生活中,相似的对象之间往往都有一些共同的组成特征。例如蜂鸟和老鹰都具有鸟类的特征,因此他们可以
被统称为鸟类。
2》在OOP中,类实际上就是对象的设计蓝图或者制作配方。
3》对象这个词,也称为实例,老鹰是鸟类的一个实例。我们能基于相同的类创建出许多不同的对象,因为类更多的是一种
模板,而对象就是在这些模板的基础上被创建出来的。
4》但是我们要明白,javascript与C++或java这种传统的面向对象语言不同,它实际上压根儿没有类。该语言的一切都是基于
对象的,其所依靠的是一套原型系统(这里的原型prototype)prototype实际上也是一种对象,我们稍后再来详细讨论这个问题
在传统的面向对象语言中,我们一般会这样描述自己的做法:“我基于Person类创建了一个叫做Bob的新对象”。而在这种基于
原型的面向对象语言中,我们则会这样描述:“我将现有的Person对象扩展成了一个叫做Bob的新对象”。
3、封装
1》对象所封装的内容由两部分组成哦(相关的数据用于存储属性,基于这些数据所能做的事(所能调用的方法))
2》初次之外,封装这个术语中还包含了一层隐藏信息的概念,这完全是另一方面的问题。因此,我们在理解这个
概念时,必须要留意它在具体的OOP语境中的含义。
以一个mp3播放器为例,如果假设这是一个对象,那么作为该对象的用户,我们无疑需要一些类似于像按钮,显示屏这样的
工作接口,这些接口能帮助我们使用该对象(如播放歌曲之类)。至于它们内部是如何工作的,我们并不清楚,而且多数情况下
也不会在意这些。换句话说,这些接口的实现对我们来说是不可见的。同样的,在OOP中也是如此。当我们在代码中调用一个对象
的方法时,无论该对象是来自我们自己的实现还是某个第三方库,我们都不需要知道该方法是如何工作的。
在编译型语言中,我们甚至都无法查看这些对象的工作代码。而由于Javascript是一种解释型语言,源代码是可以查看的。
3》关于信息隐藏,还有另一方面内容,即方法与属性的可见性。在某些语言中,我们能通过Public,private,protected这些关键字来限定方法
和属性的可见性。这种限定分类定义了对象用户所能访问的层次。
例如,private方法只有其所在对象内部的代码才有权访问,而public方法则是任何人都能访问的,在Javascript中,尽管所有的方法和属性都是
public的,但是我们将会看到,该语言还是提供了一些隐藏数据的方法,以保护程序的隐秘性。
4、聚合
1》有时也叫组合,实际上是指我们将几个现有对象合并一个新对象的过程。
总之这个概念强调的就是这种将多个对象合二为一的能力。
通过聚合这种强有力的方法,我们可以将一个问题分解成多个更小的问题。这样一来,问题就会显得更易于管理(便于我们各个击破),
当一个问题域的复杂程度令我们难以接受时,我们就可以考虑将它分解成若干子问题区,并且必要的话,这些问题区还可以再继续分解成
更小的分区。这样做有利于我们从几个不同的抽象层次来考虑这个问题。
5、重用与继承
1》通过继承这种方式,我们可以非常优雅地实现对现有代码的重用。
2》例如,我们有一个叫做Person的一般性对象,其中包含一些姓名,
出生日期之类的属性,以及一些功能性函数,如步行,谈话,睡觉,吃饭等。
3》然后,当我们发现自己需要一个Programmer对象时,当然,
这时候你可以再将Person对象中所有的方法与属性重新实现一遍,
4》但除此之外还有一种更聪明的做法,即我们可以让Programmer继承自
Person,这样就省去了我们不少工作。
5》因为Programmer对象只需要实现属于她自己的那部分特殊功能(例如,编写代码)
而其余部分只需重用person的实现即可。
6》在传统的OOP环境中,继承通常指的是类与类之间的关系,但由于javascript中不存在类,因此继承只能发生在对象之间。
7》当一个对象继承自另一个对象时,通常会往其中加入新的方法,以扩展被继承的老对象。我们通常将这一过程称之为“B继承A”
或“B扩展自A”。另外对于新对象来说,她也可以根据自己的需要,从继承而来那组方法中选择几个来重新定义。这样做并不会改变
对象的接口,因为方法的名字是相同的,只不过当我们调用新对象时,该方法的行为与之前不同了。我们将这种重定义继承方法的
过程叫做覆写。
6、多态
我们的Programmer对象继承了上一级对象Person的所有方法,这意味着这两个对象都实现了“talk”等方法,现在,我们的代码中
有一个叫做Bob的变量,即便是在我们不知道它是一个Person对象还是一个Programmer对象情况下,也依然可以直接调用该对象
的"talk"方法,而不必担心这会影响代码的正常工作。类似这种不同对象通过相同的方法调用来实现各自行为的能力,我们就称之为多态。
javascript是一种面向对象语言吗?如果是,您在javascript中是如何实现继承的呢的更多相关文章
- 用C表达面向对象语言的机制——C#版
PS:本文PDF版在这里(格式更好看一些).最新的源代码请在本页面文末下载,PDF中的链接不是最新的. 用C表达面向对象语言的机制——C#版 我一直认为,面向对象语言是对面向过程语言的封装.如果是这样 ...
- JavaScript实现AOP(面向切面编程)
什么是AOP? AOP(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计.安全控制.异常处理等.把这些功能抽离出来之后, 再通过" ...
- C#学习-面向对象语言都有类
面向对象语言的一个基本特征是它们都有类,类是C#(这类语言)中的一种复杂数据类型. 类代表一组具有公共属性和行为的对象. 在C#中定义一个类是非常简单的,只需使用class关键字并按格式来定义即可. ...
- JavaScript实现AOP(面向切面编程,装饰者模式)
什么是AOP? AOP(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计.安全控制.异常处理等.把这些功能抽离出来之后, 再通过“动态织入 ...
- go 学习笔记之go是不是面向对象语言是否支持面对对象编程?
面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对 ...
- VS Code - Debugger for Chrome调试JavaScript的两种方式
VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...
- JavaScript的三种工业化调试方法
JavaScript的三种工业化玩法 软件工程中任何的语言如果想要写出健壮的代码都需要锋利的工具,当然JavaScript也不例外,很多朋友刚入门的时候往往因为工具选的不对而事半功倍,JavaScri ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- JavaScript常用方法100种
1.输出语句:document.write(""); 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4. ...
随机推荐
- 【BZOJ2213】[Poi2011]Difference DP
[BZOJ2213][Poi2011]Difference Description A word consisting of lower-case letters of the English alp ...
- 用户画像 销量预测 微观 宏观 bi
w 目前我们没有自己的平台 第三方平台又不会给任何我们想要的数据 没有用户的注册信息 全天候的行为信息 用户画像没法做 针对我们业务的bi做的思路是什么呢 数据中心怎么做销量预测呢 ...
- Verilog HDL实用教程笔记
Verilog HDL实用教程笔记 DRC - Design Rule Check 几何规则检查ERC - Electrical Rule Check 电学规则检查自动参数提取LVS - Logic ...
- python函数回顾:dir()
描述 dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表: 带参数时,返回参数的属性.方法列表.如果参数包含方法__dir__(),该方法将被调用. 如果参数不包含__dir__( ...
- python并发编程&协程
0x01 前导 如何基于单线程来实现并发? 即只用一个主线程(可利用的cpu只有一个)情况下实现并发: 并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操 ...
- 我的Android进阶之旅------>Android中编解码学习笔记
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...
- 单例 与 static
单例的构造器是private的,不能直接用new 创建对象.static虽然可以随时使用,但是还是有被重新创建的可能. 举个例子,你希望任何时候有一个class A的实例就可以了class B { ...
- Python判断网络是否可以访问
import urllib url = "http://www.baidu.com" try: status = urllib.urlopen(url).code print st ...
- Ubuntu14.04下Nginx反向代理Odoo域名
安装nginx sudo apt-get install -y nginx 修改配置文件 vi /etc/nginx/nginx.conf #注释掉下面这行代码 #include /etc/nginx ...
- django-admin引用百度地图
实现的功能有,某个地点对应的经纬度自动填上,如果有经纬度的话,自动显示对应经纬度的地点,密匙在去百度地图引用搜索 <script type="text/javascript" ...