位置: 编程技术 - 正文

介绍一个简单的JavaScript类框架(介绍一个简单的实验)

编辑:rootadmin

推荐整理分享介绍一个简单的JavaScript类框架(介绍一个简单的实验),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:介绍一个简单的实验,介绍一个简单的英语故事,介绍一个简单的英语故事,介绍一个简单的手工作品,介绍一个简单的实验,介绍一个简单的系统,介绍一个简单的旅游地点,介绍一个简单的旅游地点,内容如对您有帮助,希望把文章链接给更多的朋友!

在写work-in-progress JavaScript book一书时,对于javascript继承体系,我花费了相当的时间,并在该过程中研究了各种不同的模拟经典类继承的方案。这些技术方案中,我最为推崇的是base2与Prototype的实现。

从这些方案中,应该能提炼出一个具有其思想内涵的框架,该框架须具有简单、可重用、易于理解并无依赖等特点,其中简单性与可用性是重点。以下是使用示例:

有几点需要留意:

构造函数须简单(通过init函数来实现), 新定义的类比须继承于已有的类, 所有的‘类'都继承于始祖类:Class,因此如果要创建一个全新的类,该类必须为Class的子类, 最具挑战的一点:父类的被覆写方法必须能访问到(通过配置上下文环境)。 在上面的示例中,你能发现通过this._super()来调用Person父类的init()和dance()方法。

对结果相当满意:使类的定义结构化,保持单一继承,并且能够调用超类方法。

简单的类创建与继承

下面为其实现(便于阅读并有注释),大概行左右。欢迎并感谢提出建议。

其中 “初始化(initializing/don't call init)”与“创建_super方法”最为棘手。接下来,我会对此做简要的介绍,使得大家对其实现机制能更好的理解。

初始化

为了说明函数原型式的继承方式,首先来看传统的实现过程,即将子类的prototype属性指向父类的一个实例。如下所示:

介绍一个简单的JavaScript类框架(介绍一个简单的实验)

然而,这里具有挑战性的一点,便是我们只想要得到‘是否实例(instatnceOf)'的效果,而不需要实例一个 Person并调用其构造函数所带来的后果。为防止这一点,在代码中设置一个bool参数initializing,只有在实例化父类并将其配置到子类的prototype属性时, 其值才为true。这样处理的目的是区分开真正的实例化与设计继承时这两种调用构造函数之间的区别,进而在真正实例化时调用init方法:

值得特别注意的是,因为在init函数中可能会运行相当费资源的代码(如连接服务器,创建DOM元素等,谁也无法预测),所以做出区分是完全必要的。

超类方法(Super Method)

当使用继承时,最常见的需求便是子类能访问超类被覆写的方法。在该实现下,最终的方案便是提供一个临时方法(._super),该方法指向超类方法,并且只能在子类方法中访问。

实现这一功能需要几步处理。首先,我们使用extend来合并基本的Person实例(类实例,上面我们提到过其构造过程)与字面对象(Person.extend()的函数参数)。在合并过程中,做了简单的检查:首先检查将被合并的的属性是否为函数,如为函数,然后检查将被覆写的超类属性是否也为函数?如果这两个检查都为true,则需要为该属性准备_super方法。

注意,在这里创建了一个匿名闭包(返回的是函数对象)来封装增加的super方法。基于维护运行环境的需要,我们应该将旧的this._super(不管其是否存在)保存起来以备函数运行后重置,这有助于在有相同名称(不想偶然丢失对象指针)的情况下发生不可预知的问题。

然后,创建新的_super方法,该方法对象仅指向超类中被覆写的方法。谢天谢地,不用对_super做任何改动或变更作用域,因为函数的执行环境会随着函数调用对象自动变更(指针this会指向超类).

最后,调用字面量对象的方法,方法执行中可能会使用this._super(),方法执行后,将属性_super重置回其原来状态,之后return退出函数。

以上可以有许多种方案能达到相同的效果(我之前曾见过将super绑定到其自身,然后用arguments.callee访问),但是感觉还是这种方法最能能体现可用性与简洁性的特点。

在我已完成的多个基于javascript原型的工作中,只有这个类继承实现方案是我发表出来与大家分享的。我认为,简洁的代码(易于学习,易于继承,更少下载)更需要提出来让大家探讨,因此,对于学习javascript类构造与继承的人们来说,这套实现方案是一个好的开始。

在浏览器中打开或关闭JavaScript的方法 所有现代浏览器都使用了JavaScript的内置支持。很多时候,你可能需要启用或手动禁用此支持。本教程将让您知道如何启用和禁用JavaScript支持,在您的浏

在HTML中插入JavaScript代码的示例 在HTML文档中的任何地方可包括JavaScript代码。但也有以下的最佳方法来包含JavaScript在HTML文件。在head.../head部分.在body.../body部分.在body.../body和head.../head

简单介绍JavaScript的变量和数据类型 JavaScript数据类型:编程语言的最根本的特征之一是一组它支持的数据类型。这些是可被表示和操纵的编程语言的值的类型。JavaScript允许有三个基本数据

标签: 介绍一个简单的实验

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

上一篇:举例详解Python中smtplib模块处理电子邮件的使用(python中deque)

下一篇:在浏览器中打开或关闭JavaScript的方法(在浏览器中打开是什么意思)

  • 增值税年末结转的会计处理
  • 一般纳税人减免增值税政策
  • 费用的进项税额可以抵扣吗
  • 小规模纳税人的进项税额怎么处理
  • 礼品进项怎么做进项转出
  • 银行转账记录能保存多久
  • 基金会对外捐赠未收到发票怎么入账
  • 计提社保公积金的会计分录
  • 小规模纳税人开具1%增值税专用发票可以抵扣吗
  • 关联企业间无偿资金的占用属于借款费用吗
  • 结算本月应付职工薪酬,其中生产工人工资为18000
  • 收回的材料赔偿款怎么处理?
  • 公司办公室租赁费会计分录
  • 个体户发放现金工资税务局认可吗
  • 建筑合同印花税在哪里交
  • 增值税普通纳税人税率
  • 在建工程和工程物资在资产负债表
  • 利润分配的余额
  • 二手车销售统一专票哪里开
  • 固定资产已入库款项已付次月开发票何时记提折旧
  • 废料出售收入
  • 预缴税金跨区域涉税在哪查询
  • 一次发放数月的高温津贴如何计算个税?
  • 计提利息收入怎么做账
  • 基本户注销帐户余额怎么分配?
  • 出口退税转内销还是转免税好
  • win11系统更新卡在25%
  • 购房发票拿到了接着干什么
  • 工程结算如何做账
  • 小规模纳税人销售使用过的固定资产
  • 笔记本电池消耗大怎么办
  • uniapp微信小程序头像获取与服务器对接
  • 安博塞利国家公园狮子
  • 火狐十大必用插件
  • 有关增值税的计算真题
  • 利润分配的账务处理如何做
  • water gardens
  • 伊斯塔神
  • 母公司收取子公司管理费用比例
  • php上传文件类型
  • php 文件系统
  • deepsort 跟踪
  • 企业所得税的调增调减怎么理解
  • 国家对建筑垃圾处理企业有补助吗
  • 中央空调的维护和保养
  • 支付临时工工资,需要个税申报吗
  • 刷pos机的如何记会计分录
  • 不单独计价的包装物押金计入什么科目
  • 信用减值损失是什么项目
  • 利润表利息费用怎么填
  • 差旅费补助无发票的文件依据
  • 固定资产为什么要交税
  • 商铺固定设施指哪些
  • 城市生活垃圾处理费征收管理办法
  • 月末本年利润借方余额表示什么
  • 上期留抵税额可以留多久
  • 收到销售折让的负数发票怎么做会计分录
  • 固定资产更新改造被替换的旧部件残值收入
  • 金税盘离线是什么意思
  • 营业外收入核算的内容有
  • 金蝶旗舰版如何备份账套
  • 工程款打入个人账户扣税吗
  • 机械租赁怎么开9个点
  • mysql数据库全量备份
  • win8系统启动慢怎么办
  • solaris教程
  • linux必不可少的分区
  • linux不能识别u盘
  • win10系统宽带连接错误解决方法
  • win8怎么关闭管理员用户
  • win8笔记本无线连接没有了,怎么设置
  • won7系统优化
  • 我为什么要
  • 公认的经典
  • 安卓手机如何打开.icon文件
  • javascript怎么设置字体大小
  • jquery.cookie.js实现用户登录保存密码功能的方法
  • python批量填表
  • 棚改房办房产证用不用交费
  • 应税销售额如何计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设