位置: 编程技术 - 正文

javascript基础知识分享之类与函数化(javascript零基础)

编辑:rootadmin

推荐整理分享javascript基础知识分享之类与函数化(javascript零基础),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript基础书,javascript基础编程,javascript 基础,javascript入门基础,javascript零基础,javascript基础入门教程,javascript 基础,javascript 基础,内容如对您有帮助,希望把文章链接给更多的朋友!

1.自定义类型--构造函数模式(伪类模式)

在基于类的系统中,对象是这样定义的:使用类来描述它是什么样的。假如建筑是基于类的系统,则建筑师会先画出房子的蓝图,然后房子都按照该蓝图来建造。

在使用自定义类型模式实现继承的时候,我们只需要将参数传递给构造函数,然后将参数挂载在实例对象上。其他关于实例对象的方法都不用传递参数,因为通过 实例对象调用的方法内部的this都可以访问到该参数。挂载在实例this对象上的变量称为实例变量。

组合--继承

在继承属性和继承方法上,我们一共调用了两次超类构造函数,当通过new调用超类构造函数创建子类构造函数的原型时,有一个问题,子类构造函数的原型对象现在便是超类构造函数的实例,因此也会有在超类构造函数为实例对象this添加的属性,只是值为undefined而已,也就是说通过new调用超类构造器函数来更改子类改造器的原型时,那么在子类构造器的原型上便会有多余的属性。这便造成了浪费。而我们需要的其实只是,子类构造器的原型能够继承超类构造器原型的方法而已。因此我们需要的,

1.创建一个子类构造器原型对象。

2.此子类构造器原型继承自超类构造器的原型。

3.因为我们在1中改写了子类构造器的原型对象,也就是重新创建了原型对象,因此我们需要在新创建的原型对象上添加constructor属性并将其赋值为子类构造器函数。

将上面的代码改写一些,如下所示。

关于constructor属性:只在构造器函数的原型上才有的属性并指向该构造器,改写了的原型对象默认是没有constructor属性的。

寄生组合式--继承

通过隐藏那些所谓的prototype操作细节,现在看起来没那么怪异了。但是否真的有所发现:没有私有环境,所有属性都是公开的。无法访问父类的方法。难以调试

2.原型

javascript基础知识分享之类与函数化(javascript零基础)

在一个纯粹的原型模式中,我们会摈弃类,转而专注对象。基于原型的继承相比基于类的继承在概念上更简单:一个新对象可以继承一个旧对象的属性。你通过构造有用的对象开始,接着可以构造更多和那个对象类似的对象。这就可以完全避免把一个应用拆解成一系列嵌套抽象类的分类过程在基于原型的系统中,我们创建的对象,看起来要像我们想要的所有这种类型的对象那样,然后告诉javascript引擎,我们想要更多像这样的对象。如果建筑是基于原型的,建筑师会先建一所房子,然后将房子都建成像这种模样的。

方法Object.creat()作为new操作符的替代方案,使用它来创建javascript对象时,能增添一种更像是基于原型的感觉。

这是一种"差异化继承"。通过定制一个新的对象,我们指明它与所基于的基本对象的区别。有时候,它对某些数据结构继承于其他数据结构的情形非常有用。

3.函数化--工厂模式

在伪类模式里,构造器函数Cat不得不重复构造器Mammal已经完成的工作。在函数化模式中那不再需要了,因为构造器Cat将会调用构造器Mammal,让Mammal去做对象创建中的大部分工作,所有Cat只关注自身的差异即可。函数化模式有很大的灵活性。它相比伪类模式不仅带来的工作更少,还让我们得到更好的封装和信息隐藏,以及访问父类方法的能力。

如果我们用函数化得样式去创建对象,并且该对象的所有方法都不用this或that,那么该对象就是持久性的。一个持久性的对象就是一个简单功能函数的集合。

私有变量:任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数外部访问这些变量。

闭包

闭包是阻止垃圾回收器将变量从内存中移除的方法,使的在创建变量的执行环境的外面能够访问到该变量。请记住:闭包由函数创建。每次调用函数会创建一个唯一的执行环境对象。函数执行完后,执行对象就会被丢弃,除非调用者引用了它。当然,如果函数返回的是数字,就不能引用函数的执行环境对象。但是如果函数返回的是一个更复杂的结构,像是函数、对象或者数组,将返回值保存到一个变量上,就创建了一个对执行环境的引用。

函数化模块模式有很大的灵活性。它相比构造函数模式不仅带来的工作更少,还让我们得到更好的封装休息和隐藏,以及访问父类方法的能力。如果对象的所有状态都是私有的,那么该对象就成为一个"防伪(tamper-proof)"对象。该对象的属性是可以被替换或者删除,当该对象的完整性不会受到损坏。我们用函数式的样式创建一个对象,并且该对象的所有方法都不使用this或者that,那么该对象就是持久性对象。一个持久性对象,就是一个简单的函数功能的集合。一个持久性的对象不会被入侵。访问一个持久性的对象时,除非有方法授权,否则攻击者不会访问对象的内部状态。

模块模式

前面的模式是用于 自定义类型创建私有变量和特权方法的。而道格拉斯所说的模块模式则是为 单例创建私有变量和特权方法。所谓单例指的就是只有一个实例的对象。(就是用对象字面量表示法创建的对象)

从本质上讲,这个对象字面量定义的是单例的公共接口。这种模式在需要对单例进行某些初始化,同时又需要维护其私有变量时非常有用。简言之,如果必须创建一个对象并以某些数据对其进行初始化,同时还要公开一些能够访问这些私有数据的方法。

增强的模块模式

这种增强的模块模式适合那些单例必须是某种类型的实例,同时还必须添加某些属性和方法对其加以增强的例子。

JavaScript模版引擎的基本实现方法浅析 模板分离了数据与展现,使得展现的逻辑和效果更易维护。利用javascript的Function对象,一步步构建一个极其简单的模板转化引擎模板简介模板通常是指

三个js循环的关键字示例(for与while) 循环的三种写法:!doctypehtmltitlejs循环by积木网/titlemetacharset="utf-8"/metaname="keywords"content="js循环by积木网"/metaname="description"content="js循环by积木网"//headbody//wh

简单谈谈javascript中this的隐式绑定 我们先来看一个例子functionfoo(){console.log(this.a);}varobj={a:2,foo:foo};obj.foo();//2this指向了obj,因为foo执行时的call-site(可以理解为调用时所在作用域)在obj上面

标签: javascript零基础

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

上一篇:JavaScript正则表达式的分组匹配详解(js中正则表达式语法)

下一篇:JavaScript模版引擎的基本实现方法浅析(javascript 引入)

  • 查账征收纳税申报表
  • 生产成本怎么核实
  • 三栏式明细账适用于银行存款吗
  • 资产处置收益是什么会计科目
  • 小规模公司用什么会计准则
  • 电子承兑到期怎么操作流程
  • 主营业务收入和销售收入
  • 基本账户变更说明模板
  • 纳税人从两处取得收入汇算清缴可以扣除2个60000吗
  • 收到货款开的增值税发票怎么写分录
  • 分期收款销售商品确认收入会计分录
  • 海关废品回收
  • 工程公司收入成本入账
  • 建筑物加高违法么
  • 单独计价入账的土地是无形资产吗
  • 固定资产转到别人账户
  • 公益捐赠税前扣除凭证
  • 工资不到3500用交个税吗
  • 盈余公积转增资本有限制吗
  • 小规模纳税人月末结转增值税
  • 销售淀粉的税率
  • 固定资产分期抵扣怎么申报增值税?
  • 两年前少缴的税款是否应补缴?
  • 贸易公司补交所得税怎么做账?
  • 以土地使用权出资入股未办过户能否抽回
  • uefi和legacy的区别对显卡兼容
  • 政策性搬迁补偿收入如何财税处理
  • 传媒改革
  • PHP:class_implements()的用法_spl函数
  • 车辆年审收费么
  • 企业发生的现金折扣应计入什么费用
  • php gettext
  • 融资购入的固定资产如何记账
  • Vue3通透教程【十四】TS复杂类型详解(一)
  • php读取json数组中指定内容
  • 对公账户的银行卡号是几位数
  • 聊聊vue3的defineProps、defineEmits、defineExpose
  • 期初金额和期末金额怎么算
  • uniapp跨域解决方案
  • 自动化测试三年规划
  • 怎么搭建本地ota
  • 行政事业单位福利费列支范围及标准2023
  • Uncaught DONException: Failed to execute ‘atob‘ on “window ‘: The string to be decoded is not carrec...
  • 百度地图api3.0
  • 财务费用在贷方,怎么结转到本年利润?
  • 个人所得税申报截止时间
  • 抵扣是什么意思大白话...举例
  • MySQL读写分离企业方案
  • 个税填在资产负债表哪个地方
  • 研发费用加计扣除新税收政策2023
  • 背书的银行承兑汇票怎么做账
  • 减免所得税额是自动计算吗
  • 项目差旅费可以直接计入劳务成本吗
  • 未计提坏账准备发生坏账如何处理
  • 房地产开发企业分为几个等级
  • 基金赎回可以赎回部分吗
  • 贴现利息高好还是低好
  • 库存商品如何结转生产成本
  • 可变现净值是什么意思
  • 未入账的记账凭证填错了怎么办
  • 固定资产多少钱入账
  • 预览版与正式版
  • mac怎么修改默认应用
  • mac osx 10.12
  • linux常用命令修改
  • 在linux系统中命令
  • inodecmn.exe
  • win8.1怎么关闭防火墙
  • 动画时期
  • curl发送formdata
  • js取二维数组数组的值
  • python shape用法
  • jquery中绑定事件
  • 基于javascript的毕业设计选题
  • unity hud优化
  • asyncio 的 coroutine对象 与 Future对象使用指南
  • 医保断交一年怎么续交
  • 纳税人信用信息
  • 文件清理规则
  • 临汾的公司需要交社保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设