位置: 编程技术 - 正文

JavaScript面向对象编程入门教程(javascript面向对象编程)

编辑:rootadmin

尽管面向对象JavaScript与其他语言相比之下存在差异,并由此引发了一些争论,但毋庸置疑,JavaScript具有强大的面向对象编程能力本文先从介绍面向对象编程开始,然后回顾JavaScript对象模型,最后演示JavaScript中的面向对象编程概念。

JavaScript回顾

如果你对诸如变量(variables)、类型(types)、函数(functions)、以及作用域(scope)等JavaScript概念觉得心里没底,那么你可以阅读重新介绍JavaScript中的这些主题。你还可以查阅JavaScript 1.5核心指南面向对象编程

面向对象编程是一种编程范式(paradigm),即使用抽象来创建基于真实世界的模型。它使用了几种以前建立的范式技术,包括模块化(modularity)、多态(polymorphism)、和封装(encapsulation)。今天,许多流行的编程语言(比如Java、JavaScript、C#、C++、Python、PHP、Ruby、以及Objective-C)都支持面向对象编程(OOP)。面向对象编程可视为使用协作对象集合来进行软件设计,这与传统观点相反,传统观点把程序视为函数集合,或者简化为计算机指令列表。在面向对象编程中,每个对象都具有以下能力:接收消息、处理数据、以及给其他对象发送消息。每个对象都可以视为一个独立的具有不同角色或责任的小机器。面向对象编程旨在为编程提升更大的灵活性和可维护性,并在大规模软件工程中广泛流行。由于其非常重视模块化,因此面向对象代码旨在让开发更简单、稍后理解起来更容易,而且相对于较少采用模块化的编程方法,使得对于复杂情况及步骤的分析、编码和理解更加直接。

专用术语

类(Class) ~ 定义对象的特征(characteristics)。 对象(Object) ~ 类的实例(Instance)。 属性(Property) ~ 某一对象特征(characteristic),例如颜色。 方法(Method) ~ 某种对象能力,例如行走。 构造函数(Constructor) ~ 实例化(instantiation)时所调用的方法。 继承(Inheritance) ~ 一个类可以继承来自另一个类的特征。 封装(Encapsulation) ~ 一个类只定义该对象的特征,一个方法只定义该方法如何执行。 抽象(Abstraction) ~ 将某一对象的复杂继承、方法、属性结合在一起,而且必须能够模拟某一现实模型。 多态(Polymorphism) ~ 不同类可能会定义相同的方法或属性。对于面向对象编程的进一步描述,参阅维基百科的面向对象编程词条。

基于原型的编程

基于原型的编程(Prototype-based programming)是一种面向对象编程风格,其中类(classes)并不存在,并且行为重用(在基于类的语言中称为继承)是通过粉饰充当原型的现存对象来完成的。这种模式也称为无类的(class-less)、面向原型的(prototype-oriented)、或基于实例(instance-based)的编程。关于基于原型语言的最初(且非常规范的)示例就是由David Ungar和Randall Smith开发的Self编程语言。然而,这种无类编程风格最近越来越受欢迎,并且已被一些编程语言采用,例如avaScript、Cecil、NewtonScript、Io、MOO、REBOL、Kevo、Squeak(当使用Viewer框架来操纵Morphic组件时)、及其他几种语言。

JavaScript面向对象编程

核心对象(Core Objects)

JavaScript有几个包含在其核心中的对象;例如,Math、Object、Array、以及String等对象。下面的示例演示了如何使用Math对象的random()方法获取随机数。

提示:本例和所有其他示例都假设已在全局范围内定义了函数名alert(正如包含在web浏览器中的alert一样)。alert函数实际上不是JavaScript本身的一部分。

JavaScript核心对象列表,参阅JavaScript 1.5核心参考:全局对象(Global Objects)。JavaScript中的每个对象都是一个Object对象的实例,并因此继承其所有属性和方法。

自定义对象(Custom Objects)

类(The Class)JavaScript是基于原型的语言,其中不包含可在如 C++或Java中找到的类声明(class statement)。有时这会让一些习惯于具有类声明语言(languages with a class statement)的程序员感到困惑。不过,JavaScript用函数(functions)作为类。定义一个类简单到就是定义一个函数。在下例中,我们定义了名为Person(人)的新类。对象(类实例)(The Object (Class Instance))要创建obj对象的一个新实例,我们使用语句new obj,同时将结果(其类型是obj)赋给某个变量(variable),以便稍后访问。在下例中,我们首先定义名为Person的类,然后创建两个实例(person1和person2)。

还可参阅新的实例化替代方法Object.create。构造函数(The Constructor)

当实例化时(创建对象实例的瞬间)是会调用构造函数。构造函数是类的一个方法。而在JavaScript中,会函数(function)作为作为该对象的构造函数;因此,也就无需显式定义一个构造函数方法。类中声明的每个行为在实例化时都会执行。构造函数用于设置对象属性或调用方法为使用该对象做准备。本文稍后会介绍,通过使用一种不同的语法来添加类方法及其定义 。在下例中,当实例化Person时,Person类的构造函数会显示一个警告框。

属性(对象属性)(The Property (object attribute))

属性是包含在类中的变量;每个对象实例都有这些属性。属性应设置在类(函数)的原型(prototype)属性中,以便继承正常工作。在类中操作属性是通过this关键字实现的,this引用当前对象。在类外部访问(读或写)某个属性要通过以下语法:InstanceName.Property;这与C++、Java、以及其他一些语言所用语法相同。(在类内部使用this.Property的语法来获取或设置属性值)。在下例中,我们为Person类定义gender(性别)属性,然后在初始化时定义该属性。

方法(The methods)方法遵循与属性相同的逻辑;区别在于它们是函数而且被定义为函数。调用方法与访问属性相似,不过你要在方法名末尾添加(),可能会有参数(arguments)。定义一个方法,就是为该类prototype属性上的某个命名属性指定一个函数;函数被分配到的那个名称就是在对象上调用该方法的名称。在下例中,我们为Person类定义并使用sayHello()方法。

在JavaScript中,方法是作为属性被绑定到某个类/对象的普通函数对象,这意味着,可以“脱离上下文(out of the context)”来调用它们。考虑如下示例代码:此示例一次演示了多个概念。这表明,在JavaScript中没有“基于对象的方法(per-object methods)”,因为该方法的所有引用都指向完全相同的函数,即我们起初在原型上定义的那个函数。当某个函数被作为方法(或确切地说是属性)调用时,JavaScript会将当前的“对象上下文(object context)”“绑定”到特定的“this”变量。这与调用该函数对象的“call”方法等效,如下所示:

推荐整理分享JavaScript面向对象编程入门教程(javascript面向对象编程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript面向对象 第三方类库,javascript面向对象编程指南 pdf,javascript面向对象编程指南 pdf,javascript面向对象编程指南第三版,javascript面向对象精要pdf下载,javascript面向对象编程指南,javascript面向对象编程指南,javascript面向对象编程指南,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript面向对象编程入门教程(javascript面向对象编程)

更多相关信息,请参阅Function.call和Function.apply

继承(Inheritance)

继承是一种方法,用于创建作为一个或多个类专用版本的类。(JavaScript仅支持单类继承)。这个专用类通常被称为子类(child),而其他类通常被称为父类(parent)。在JavaScript中,你要完成继承,需将父类的实例赋给子类,然后将子类特化(specializing)。

提示:由于JavaScript不检测的子类的prototype.constructor(原型的构造函数),参阅Core JavaScript 1.5核心参考:Global Objects:Object:prototype属性,因此我们必须手动指定该值。

在下例中,我们定义Student类作为Person的子类。然后我们重新定义sayHello()方法,并添加sayGoodBye()方法。

封装

在上例中,Student无须知晓Person类的walk()方法是如何实现的,但仍可使用该方法;Student类无须显式定义该方法,除非我们想改变它。这称为封装(encapsulation),这样每个类继承其父类的方法,并且只需定义它所希望改变的东西。

抽象

抽象是一种机制(mechanism),允许对处理中的问题的当前部分进行建模。这可以通过继承(特化)或组合(composition)来实现。JavaScript通过继承实现特化(specialization),通过让类实例成为其他对象的属性值实现组合。JavaScript的Function类继承自Object类(这说明模型的特化),并且Function.prototype属性是Object的实例(这说明了组合)。

多态

就像所有的方法和属性被定义在原型属性内部一样,不同的类可以定义具有相同名称的方法;方法的作用域限于定义它们的类之内。这仅当两个类之间没有父子关系(当一个类没有从继承链中的其他类继承时)时才为真。

提示

本文中所提出的面向对象编程实现技术不仅适用于JavaScript,因为就如何进行面向对象编程而言,这是非常灵活的。同样,这里展示的技术既没有使用任何语言技巧(language hacks),也没有模仿其他语言的对象理论实现。在JavaScript中,还有其他更高级的面向对象编程的技术,但是那些内容已超出了这篇介绍性文章的范围。

Javascript WebSocket使用实例介绍(简明入门教程) 一旦你了解了网络套接字与WEB服务器的连接,你将可以从浏览器发送数据到服务器并且可以接收由服务器返回的响应数据。以下是创建一个新的WebSocket

javascript打开word文档的方法 首先我们新建一个html文件,并且写一个FileUpLoad以及button控件。代码如下:inputid="flUpload"type="file"/fileUploadinputid="btnOpenFile"type="button"value="button"onclick="OpenFil

淘宝网提供的国内NPM镜像简介和使用方法 淘宝的NPM镜像是一个完整的npmjs.org镜像。你可以用此代替官方版本(只读),同步频率目前为分钟一次以保证尽量与官方服务同步。1.当前registry.npm.taobao.

标签: javascript面向对象编程

本文链接地址:https://www.jiuchutong.com/biancheng/373781.html 转载请保留说明!

上一篇:PHP开发者必须掌握的6个关键字(php开发要求)

下一篇:Javascript WebSocket使用实例介绍(简明入门教程)

  • 分配本月材料费用的会计分录
  • 其他权益工具投资科目编码
  • 承兑汇票私人贴现要多久
  • 集体不动产和动产包括
  • 企业组织结构的形式
  • 空调安装发票税率
  • 发票第二年是否可以作废
  • 怎么设置存货科目
  • 有发票无明细能报销吗
  • 行政划拨无偿取得发票
  • 天然气安装工程施工劳务协议
  • 营利性养老机构需要缴纳哪些税
  • 增值税专票电话号码错了有关系吗
  • 3%增值税率包括哪些
  • 没有进项的产品开了发票怎么办
  • 代扣代缴个税手续费返还怎么操作
  • 企业股权溢价转让会计分录
  • 海关完税价格表
  • 建筑机械租赁站
  • 哪些理财产品能赎回
  • 员工离职赔偿计入什么科目
  • 货代免税是否需要每年备案
  • 已抵扣的进项税额怎么转出
  • 收入冲减费用
  • 亏损计提递延
  • 新版edge浏览器兼容性视图怎么设置
  • 长期待摊费用摊销会计分录
  • 个税手续费会计分录
  • 为什么u盘里的文件无法删除
  • 税收返还如何做账
  • win7纯净版系统 9代
  • php text
  • 特殊性税务处理弥补亏损限额
  • Yii2 rbac权限控制之菜单menu实例教程
  • html中的标签有哪些
  • php运算符@符号
  • 负数发票的销售成本怎么做?
  • 企业办理退税,税务机关要检查吗
  • 给分公司开的发票,总公司付的款可以吗
  • 存货盘盈盘亏的会计处理
  • 图书免税?
  • 销售收入和营业收入的关系
  • 准予从销项税额中扣除的有哪些
  • 金税盘维护费抵扣
  • 个体户不刻公章也要报税吗
  • 个税手续费返还增值税申报表怎么填
  • 单位结算卡和对公账户号码不一样
  • 预收货款方式销售货物,纳税义务发生时间
  • 化妆品的成本利润率
  • 出口退税的范围是多少
  • 企业代扣税费会计分录
  • 现金收款的程序是什么
  • 本月没有认证的进项税怎么做分录
  • 去年的招待费做什么科目
  • 工会经费账务处理流程
  • 外经证核销反馈表写错了怎么办
  • 商贸企业固定资产折旧可以一次性扣除吗?
  • 企业利润怎么算出来的
  • sqlserver怎么使用索引
  • freebsd ip配置
  • centos6.10安装教程
  • win8系统 Cisco VPN 442错误怎么办?解决方法介绍
  • windowsxp怎么查看用户名密码
  • win8系统特点
  • window10光驱不能用了
  • 阿里云ecs keepalived
  • 好用的shell终端
  • 执行批处理命令
  • 批处理检查输入文本是否为字母或数字
  • jquery.form
  • 安卓版本apk
  • asx文件的作用
  • 税务局属于什么行业类别
  • 税务软件服务商
  • 小规模纳税人无进项发票要如何做账?
  • 住房公积金补扣
  • 工会经费少申报一个月可以下个月补上吗
  • 大企业如何做好工作
  • 转租土地合法吗现在
  • 资源税什么时候征收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设