如何把文件放到文件列表顶层?

身份认证 购VIP最低享 7 折!

步骤9:设计顶层文件 (1)依照前面的步骤2,新建f_adder.gdf文件,调入半加器。

2020年9月22日,习近平总书记在第75届联合国大会一般性辩论上宣布中国的“双碳”目标:中国二氧化力争于2030年前达到峰值,努力争取2060年前实现。

2021年3月,国家发改委明确将建立碳达峰碳中和的“1+N”政策体系,作为我国落实“双碳”工作的顶层设计。2021年5月,中央层面成立了碳达峰碳中和工作领导小组,作为指导和统筹做好碳达峰碳中和工作的议事协调机构。领导小组办公室设在国家发展改革委。

2021年10月24日发布的《中共中央 国务院关于完整准确全面贯彻新发展理念做好碳达峰碳中和工作的意见》(中发〔2021〕36号)(以下简称《意见》),10月26日,国务院发布《关于2030年前碳达峰行动方案的通知》(国发〔2021〕23号)(以下简称《行动方案》)。作为“1+N”政策体系中的“1”,《意见》是“双碳”的指导性、纲领性文件,对碳达峰碳中和这项重大工作进行了系统谋划、总体部署;“N”则包括能源、工业、交通、新型基础设施、建筑等重点行业和领域碳达峰实施方案,以及支持“双碳”相关政策体系和保障措施等保障方案。《行动方案》是“N”中为首的政策文件,围绕贯彻落实党中央、国务院关于碳达峰碳中和的重大战略决策,按照《意见》工作要求,聚焦2030年前碳达峰目标,对推进碳达峰工作做出总体部署。

《意见》和《行动方案》共同构成我国实现碳达峰碳中和目标的顶层设计,本文将对这两个文件进行简要分析。

一、双轮驱动助力“双碳”目标实现

“双碳”目标的实现并不能只就碳论碳,而是多重目标的经济社会系统性变革,需要统筹安排协调。从本次《意见》和《行动方案》可以看出,要推动多项改革协同并进,需要政府和市场“双轮”驱动。

一方面,政府引导将从全局统筹协调,深化能源和相关领域改革,破除制约低碳发展的体制机制障碍。要实现“双碳”目标,需要加强顶层设计,坚持“全国一盘棋”,推动地方、行业、企业和社会公众共同参与和努力。《意见》和《行动方案》都提出要健全法律法规标准,加强法律法规间的衔接协调,抓紧修订一批能耗限额、产品设备能效强制性国家标准和工程建设标准,提升重点产品能耗限额要求,扩大能耗限额标准覆盖范围。

另一方面,公共资本有限,要推动“双碳”目标实现,还需充分发挥市场配置资源的决定性作用,引导各类资源、要素向绿色低碳发展集聚。《意见》和《行动方案》提出要深化能源体制机制改革,在投资领域,则要完善支持社会资本参与政策,激发市场主体绿色低碳投资活力。《行动方案》提出要鼓励社会资本以市场化方式设立绿色低碳产业投资基金。在市场机制方面,《意见》提出要依托公共资源交易,加快建设完善全国碳排放权交易市场,逐步扩大市场覆盖范围,丰富交易品种和交易方式,完善配额分配管理,并将交易纳入全国碳排放权交易市场,同时加强电力交易、用能权交易和碳排放权交易的统筹衔接,通过各类公共资源交易的建设,

强化市场在降碳工作中的作用。《行动方案》也强调加强市场机制间的衔接与协调,将碳排放权、用能权交易纳入公共资源交易平台。

二、实现“双碳”目标是全社会的系统性工程

 “双碳”是系统性、战略性和全局性工作,覆盖能源、工业、交通、建筑等高耗能、高排放部门,涉及生产和消费、基础设施建设和社会福利等各方面,比较复杂。

《意见》和《行动方案》从我国碳排放具体来源分类入手,分别从经济社会层面、产业结构、能源体系、交通运输体系、城乡建设等方面提出具体的政策措施。《行动方案》提出系统推进、重点突破。全面准确认识碳达峰行动对经济社会发展的深远影响,加强政策的系统性、协同性。抓住主要矛盾和矛盾的主要方面,推动重点领域、重点行业和有条件的地方率先达峰。《行动方案》将碳达峰贯穿于经济社会发展全过程和各方面,重点实施能源绿色低碳转型行动、节能降碳增效行动、工业领域碳达峰行动、城乡建设碳达峰行动、交通运输绿色低碳行动、循环经济助力降碳行动、绿色低碳科技创新行动、碳汇能力巩固提升行动、绿色低碳全民行动、各地区梯次有序碳达峰行动等“碳达峰十大行动”。

《意见》和《方案》将“双碳”目标划分为到2025年、2030年、2060年等几个不同阶段,并设置具体的实现目标。不同阶段不同目标的设置,有助于指导地方按照此部署循序渐进、有条不紊地推进“双碳”工作,不至于盲目下指标,搞竞赛。

三、能源是实现“双碳”目标的主战场

无论是《意见》,还是《行动方案》,核心都是碳达峰碳中和。《意见》着眼长远,提出了构建绿色低碳循环发展经济体系、提升能源利用效率、提高非化石能源消费比重、降低二氧化碳排放水平、提升生态系统碳汇能力等五个方面主要目标。《行动方案》聚焦“十四五”和“十五五”两个碳达峰关键期,提出了提高非化石能源消费比重、提升能源利用效率、降低二氧化碳排放水平等方面主要目标。具体的目标见表1。

  •  绿色低碳循环发展的经济体系初步形成,重点行业能源利用效率大幅提升;

  • 单位国内生产总值能耗比2020年下降13.5%;

  •  单位国内生产总值二氧化碳排放比2020年下降18%;

  • 非化石能源消费比重达到20%左右;

  • 森林覆盖率达到24.1%,森林蓄积量达到180亿立方米。

  •  非化石能源消费比重达到20%左右;

  • 单位国内生产总值能源消耗比2020年下降13.5%;

  •  单位国内生产总值二氧化碳排放比2020年下降18%。

  • 经济社会发展全面绿色转型取得显著成效,重点耗能行业能源利用效率达到国际先进水平;

  •  单位国内生产总值能耗大幅下降;

  •  单位国内生产总值二氧化碳排放比2005年下降65%以上;

  • 非化石能源消费比重达到25%左右,风电、太阳能发电总装机容量达到12亿千瓦以上;

  • 森林覆盖率达到25%左右,森林蓄积量达到190亿立方米,二氧化碳排放量达到峰值并实现稳中有降

  • 非化石能源消费比重达到25%左右;

  • 单位国内生产总值二氧化碳排放比2005年下降65%以上,顺利实现2030年前碳达峰目标。

这一系列目标,立足于我国发展阶段和国情实际,标志着我国将完成碳排放强度全球最大降幅,用历史上最短的时间从碳排放峰值实现碳中和,体现了最大的雄心力度,需要付出艰苦卓绝的努力。

(一)能耗双控是推动实现“双碳”目标的重要抓手

能源活动产生的二氧化碳排放占我国二氧化碳排放的绝大比重。无论从国内实践还是国际经验看,节能和提高能效都是减少能源活动二氧化碳排放的有效途径。我国将用全球历史上最短的时间从碳达峰过渡到碳中和,并完成全球最高的碳排放强度降幅。煤炭仍是我国能源安全的压舱石,化石能源消费仍占据大半壁江山,迫切需要形成有效的碳排放控制阀门。

能耗双控是实现“双碳”目标任务的关键支撑。《意见》和《行动方案》提出构建清洁低碳安全高效能源体系,做好产业布局、结构调整、节能审查与能耗双控的衔接,对能耗强度下降目标完成形势严峻的地区实行项目缓批限批、能耗等量或减量替代。未来我国能源结构优化带来的减碳潜力将越来越明显,但到2030年仍有75%左右能源消费需要依靠化石能源来满足。《意见》提出强化节能监察和执法,加强能耗及二氧化碳排放控制目标分析预警,严格责任落实和评价考核,《行动方案》提出实施以碳强度控制为主、碳排放总量控制为辅的制度,对能源消费和碳排放指标实行协同管理、协同分解、协同考核,逐步建立系统完善的碳达峰碳中和综合评价考核制度。加强监督考核结果应用,对碳达峰工作成效突出的地区、单位和个人按规定给予表彰奖励,对未完成目标任务的地区、部门依规依法实行通报批评和约谈问责。

能耗双控是加快经济社会发展全面绿色转型的重要抓手。我国是全球最大的发展中国家,2030年之前经济社会还将持续较快发展,能源需求保持刚性增长,在较快的经济增速下实现碳达峰任务十分艰巨。与此同时,我国产业结构偏重、能源结构偏煤、能效水平偏低的问题突出,成为加快绿色低碳转型的重要制约。《意见》提出推进经济社会发展全面绿色转型,强化绿色低碳发展规划引领,优化绿色低碳发展区域布局,加快形成绿色生产生活方式,加快商贸流通、信息服务等绿色转型;《行动方案》提出在京津冀、长三角、粤港澳大湾区等区域要发挥高质量发展动力源和增长极作用,率先推动经济社会发展全面绿色转型,支持传统产业和资源富集地区绿色转型。《意见》提出坚决遏制高耗能高排放项目盲目发展,提升高耗能高排放项目能耗准入标准,加强产能过剩分析预警和窗口指导。大力发展绿色低碳产业。《行动方案》提出坚决遏制“两高”项目盲目发展。采取强有力措施,对“两高”项目实行清单管理、分类处置、动态监控。全面排查在建项目,对能效水平低于本行业能耗限额准入值的,按有关规定停工整改,推动能效水平应提尽提,力争全面达到国内乃至国际先进水平。

(二)将节约能源资源放在首位

节约能源是实现“双碳”目标的首要方式。《意见》明确,实现碳达峰、碳中和目标,要坚持“全国统筹、节约优先、双轮驱动、内外畅通、防范风险”的工作原则。把节约能源资源放在首位,实行全面节约战略,持续降低单位产出能源资源消耗和碳排放,提高投入产出效率,倡导简约适度、绿色方式,从源头和入口形成有效的碳排放控制阀门。

(三)优化能源结构是重中之重

我国能源产业格局中,产生碳排放的化石能源:煤炭、石油、天然气等占能源消耗总量的84%,而不产生碳排放的水电、风电、核能和光伏等仅占16%。要实现2060年碳中和的目标,就需要大幅发展可再生能源,降低化石能源的比重。

从《意见》和《行动方案》主要目标来看,能源结构调整的重点在于全面提升非化石能源占比,同时明确了风电、太阳能发电在未来能源体系中将承担更重的责任。

四、碳汇将发挥不可替代作用

落实‘双碳’目标,主要靠调整能源结构、优化产业结构、提升能源利用效率以及绿色低碳技术和体制机制创新。但因为林业在应对气候变化中具有特殊地位,它在增汇减排方面具有的四大功能决定了林业碳汇在落实‘双碳’目标中将发挥着不可替代的辅助作用。

林业碳汇是最常见和最有效的碳汇形式之一,通常指通过植树造林等措施,吸收二氧化碳,减少温室气体在大气中浓度的过程、活动与机制。据最新测算,我国森林碳储量达645亿吨,林草年碳汇量超过11亿吨。

无论是降低化石能源在使用过程中的碳排放,还是研究用非碳能源进行替代,都属于从排放端来探讨如何减排。实现双碳目标,还需要在固碳端发力,通过生态建设,土壤固碳,等工程及技术,去除那些不得不排放的二氧化碳。

《意见》和《行动方案》都提出将通过强化国土空间规划和用途管控等方式巩固生态系统碳汇能力、稳定现有森林、草原、湿地、海洋、土壤、冻土、岩溶等固碳作用,提升生态系统碳汇增量,通过实施生态保护修复重大工程等方式提升生态系统碳汇增量。

《意见》和《行动方案》作为“双碳”目标的顶层设计文件,为“1+N”政策体系定下了基调。后续将出台的一系列文件将构建起目标明确、分工合理、措施有力、衔接有序的碳达峰碳中和政策体系。

实现碳达峰、碳中和是一场广泛而深刻的经济社会系统性变革,面临前所未有的困难挑战。在中央层面制定印发《意见》和《行动方案》,对碳达峰碳中和这项重大工作进行系统谋划和总体部署,进一步明确总体要求,提出主要目标,部署重大举措,明确实施路径,对统一全党认识和意志,汇聚全党全国力量来完成碳达峰碳中和这一艰巨任务具有重大意义。

正则就是一个规则,用来处理字符串的规则
编写一个规则,验证某个字符串是否符合这个规则,正则匹配使用的是test方法

编写一个规则,在一个字符串中把符合规则的内容都获取到;正则的exec、字符串的split、replace、match等方法都支持正则

正则的创建方式以及区别

接下来八位 出生年+月+日 接下来的两位:没什么用 倒数第二位数字 奇数为男,偶数为女

捕获的内容是一个数组,数组中的第一项是当前正则捕获的内容,如果有小括号(),则第二项捕获的是小括号里的内容。

  • index:捕获内容在字符串中开始的索引位置。
  • input:捕获的原始字符串。如果没有匹配的返回null;

1、(懒惰性)捕获的特点:执行一次捕获一次,每次执行exec只捕获第一个匹配的内容。

  • 每个正则都自带lastIndex属性:正则每一次捕获在字符串中开始查找的位置,默认值为0;
    我们手动修改lastIndex的值也不会影响exec每次开始查找的索引。

如何解决只捕获第一个匹配(懒惰性)?

在正则末尾加一个修饰符"g"
修改lastIndex的值为上一次捕获内容之后的第一个字符的索引;加了g之后能保证下次捕获第二个匹配的内容;
通过加g 每次捕获结束后,lastIndex的值都会改变成最新的值,下次捕获从最新的位置开始找。如果没有找到符合的,则返回null;
如何解决exec执行一次捕获一次?

>用字符串方法方法实现多次捕获 >1、如果正则中加了修饰符g,那么执行一次就可以把所有匹配的结果捕获到 >2、如果不加g,那么只捕获第一次匹配的结果。返回一个数组,数组中是捕获的每一项; >在分组捕获中, >如果正则不加修饰符g, > - 那么match和exec一样,可以捕获到小分组的内容。 >如果正则加了修饰符g > - match只能捕获到大正则匹配的内容,而对于小分组匹配的内容是无法捕获到的; `注意`:由于test和exec的原理相同,如果加了g,都是修改lastIndex值来匹配或者捕获,所以使用test和exec都会修改lastIndex的值,所以使用exec捕获之前最好不要使用test; 用test也可以捕获符合的字符串 RegExp.$1//只能捕获第1个小分组里面的内容 RegExp.$2//只能捕获第2个小分组里面的内容 RegExp.$3//只能捕获第2个小分组里面的内容 RegExp.$1//只能捕获第1个小分组里面的内容 RegExp.$2//只能捕获第2个小分组里面的内容 ###所有的支持正则的方法都可以实现正则的捕获(一般都是字符串的方法) >字符串中常用的支持正则的方法: >- split:如果给的正则中包含小分组,那么会把小分组中的内容也捕获到; >?:只匹配不捕获, 只能放在小分组的开头。如果加在分组中,那么只会匹配该分组中的内容,而不会捕获 >计算是第几个分组的时候,我们从左向右找'('即可 ##replace(第二个参数支持直接在字符串中使用$1-9) >在不使用正则的情况下,每次执行只能替换第一个匹配的字符串,而且每次执行都是从字符串索引为0的位置开始查找 >`第一个参数为正则时`,正则捕获几次,就替换几次,换成函数也同理,正则捕获几次,函数就执行几次,函数中返回的是什么,就相当于把正则捕获的内容替换成什么。 >`第二个参数为函数时`,正则捕获几次,函数就执行几次,函数执行的时候还会默认的传入三个参数: >index(捕获内容在字符串中的开始索引) //如果正则中有分组的话 …………直到小分组的内容显示完 return 的是什么就会把正则每次捕获的内容替换成什么 需求:把每个单词的首字母替换为大写,zhu-feng-pei-xun当成一个单词 ###时间格式化字符串 //1、执行一次捕获操作,得到需要的六个结果 >我们把对象数据类型实现`把描述同一件事务的属性或者特征归纳汇总在一起,以此避免全局变量冲突问题`的方式和思想叫做:单例设计模式; >把描述同一件事务的属性或者方法存放在某一个命名空间下,多个命名空间中的属性和方法是互不干扰的

使用单例模式实现模块化开发

模块化开发:把一个复杂页面按照具体功能划分成几大块,然后由不同的人分别去开发,这种模块划分的思想就是模块化开发功能。

//=>项目主管(开发人员):公共模块
//=>陆永勇:搜索模块
//=>唐元帅:天气模块
//=>陈金广:频道模块
 //=>在当前的命名空间下调取其它命名空间的方法:指定好对应的命名空间名字即可,使用 [NameSpace].[property] 就可以操作了
 //=>调取本模块中的一些方法,可以直接使用THIS处理即可:此方法中的THIS一般都是当前模块的命名空间

基于JS高阶编程技巧惰性思想,来实现的单例模式,并且可以把一些常用的设计模式(如:命令模式、发布订阅模式、promise设计模式等)融合进来,最后清晰的规划我们的业务逻辑代码,方便后期二次开发和维护,这种设计思想综合体就是高级单例模式,也是最常用的。

类:对象的具体细分(按照属性或特性细分的一些类别)
实例:某一个类中的具体事物

Number:每个数字或者NaN是它的一个实例
Object:对象类,每个对象数据类型都是它的实例

Function:函数类,每个函数都是它的一个实例

元素对象或者元素集合的类

2.实例创建方式(构造函数方式)

1、对于引用数据类型来说,两种创建方式是大致相同的,只不过,两种方法创建的语法不同。

两种创建方式在核心意义上没有差别,都是创建Array这个类的一个实例,但是在语法上是有区别的
1、字面量创建方式传递进来什么,都是给数组每一项加入的内容
new Array(10):创建一个长度为10的数组,数组中的每一项都是空
new Array('10'):如果只传递一个实参,并且实参不是数字,相当于把当前值作为数组的第一项存储进来
new Array(10,20,30):如果传递多个实参,不是设置长度,而是把传递的内容当做数组中的每一项存储起来

2、对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建出来的结果是有一定区别的,从严格意义上来讲,只有实例创建出来的结果才是标准的对象,数据类型值也是标准的基本数据类型,也是标准的内置类的实例;对于字面量方式创建出来的结果是基本数据类型的值,不是严格的实例,但是由于JS的松散特点,导致了可以使用 内置类.prototype上提供的方法;

使用构造函数方式,主要是为了创建类和实例的,也就是基于面向对象思想来实现一些需求

在JS中,当我们使用new xxx()执行函数的时候,此时的函数就不是普通的函数了,而是变为一个类,返回的结果叫做当前类的实例,我们这种new xxx执行的方式称之为构造函数设计模式

构造函数执行时new都干了些什么?

Fn(),执行的时候,是先把函数执行了,也就是后面的Fn()先执行,形成一个私有作用域,形参赋值变量提升,在变量提升完了之后,new操作符才起了作用,这个时候,浏览器开始创建一个新的对象,让Fn中的this指向这个新创建的对象,然后让这个对象的_proto_指向Fn.prototype,然后JS代码才开始继续往下执行,开始往新创建的对象当中添加每个实例私有的属性和方法。JS代码执行完成后,会默认返回当前创建的这个对象。

普通函数执行与构造函数执行的区别

构造函数执行的时候,也是先形成一个私有作用域,形参赋值,变量提升,在代码从上而下执行之前,构造函数有特殊的操作:浏览器会在当前的作用域中默认创建一个对象数据类型的值,并且会让当前函数中的this指向创建的这个对象。然后JS代码再执行,代码执行完成后,即使函数中没有写return,在构造函数模式中:浏览器会默认的把创建的对象返回到函数外面

  • 构造函数执行期间,既具备函数执行的一面,也同时具备自己独有的操作:在构造函数执行期间,浏览器会默认创建一个对象,这个对象就是当前这个构造函数(类)实例,函数执行完成后,浏览器会默认的把这个实例返回。所以new Fn()执行,Fn是一个类,返回的结果就是Fn这个类的一个实例

构造函数执行后面的‘()’问题

构造函数执行如果不需要传递参数,函数后面的()可省略,如new Fn()可写为new Fn

  • 如果要在new Fn之后直接调用实例的方法,则必须要加小括号,即必须写成new Fn().方法名

构造函数模式的返回值问题

构造函数模式中默认返回值是当前的实例,如果有return,返回分2种情况:
1、return 后面是一个基本数据类型的值,当前实例是不变的,例如return 100;我们的返回值还是当前类的实例;
2、return 后面是一个引用数据类型的值,当前实例会被返回的值给替换掉例如return {name:"珠峰"}我们的返回值就不再是当前类的实例了,而是对象 {name:"珠峰"};

检测某一个实例是否属于这个类, 判断A实例是否属于B类

检测attr是否是object的属性,不管是私有属性还是公有属性只要存在,用in来检测都是true

attr是否是A实例的私有属性

  • 所有的类(内置类和自定义类都是)

基于构造函数模式的原型链模式解决了方法或者属性公有的问题,把实例之间公有的属性和方法写在当前类的prototype属性上;
1、每一个函数数据类型都有一个天生自带的属性:prototype(原型),并且这个属性的属性值是一个对象数据类型的值(<font 2、在浏览器给prototype开辟的这个堆内存中,浏览器天生给它加了一个constructor属性(构造函数),属性值是当前函数(类)本身;
3、每一个对象数据类型(普通对象、数组、正则、实例、protoype..)也天生自带一个属性:_proto_,属性值指向当前实例所属类的原型(prototype);
(IE中屏蔽了对象的__proto__属性,但是确实有,只是不让我们使用而已)
4、Object是JS中所有对象数据类型的基类(最顶层的类);

原型链模式中的this

原型模式中的this分两种情况:
2、 原型链中提供的私有(公有)方法中的this问题:
总结看执行的时候"."前面是谁this就是谁。具体操作步骤如下

  • 1、需要先确定this的指向(this)
  • 2、把this替换成对应的的代码
  • 3、按照原型链查找的机制,一步步的查找结果

如何往原型中批量添加属性和方法

让某个构造函数的原型指向我们自己开辟的堆内存,但是自己开辟的堆内存当中是没有constructor属性的,所以要往自己开辟的堆内存中添加constructor属性,属性值为当前构造函数本身;
缺点:重构原型后,会导致之前添加的属性和方法都没有了,只能使用重构之后添加的属性和方法;

  • 不要忘了重构之后要添加constructor属性指向当前构造函数;
  • 内置类的原型不能重构,浏览器不允许我们这么做;
  • 重构原型之前生成的实例的__proto__属性值依然指向重构之前的原型,而不是重构之后的原型,只有在重构原型之后生成的实例的__proto__属性值才指向新的原型;

它是一种编程思想,让我们基于类和实例的概念来编程开发和学习。

把实现一个功能的代码,封装在一个函数当中,以后再想实现这个功能,只需要执行这个方法即可,不需要重复的编写代码,减少了页面中的代码冗余度,提高了代码的重复利用率,实现了低耦合高内聚的思想

一个类的多种形态:重载、重写;
方法名相同,参数不同,叫做方法的重载
JS中没有严格意义上的重载,如果方法名相同,那么就会保留最后一个方法,和传递的参数没有关系;
JS中的重载:根据传递的实参不同,来实现不同的功能。可以把这种方法叫做重载。
JS中的重写:子类重写父类的方法

子类继承父类的一些属性和方法

/继承父类之后,需要手动添加constructor属性

<font color=red>特点</font>:它是把父类中私有+公有的属性和方法的都继承到了子类的原型上(子类公有的)
<font color=red>核心</font>:原型继承是让子类和父类之间增加了原型链的连接关系,以后子类的实例想要父类中的方法,需要利用原型链查找机制一级一级向上查找来使用

  • 1、子类的原型指向了父类的一个实例,如果实例的某个属性的值是引用数据类型,那么我生成子类的一个实例f,我通过f来修改子类公有的这个引用数据类型的值,那么子类的其他实例也会受影响;
  • 2、不能向父类的构造函数传递参数。如果父类给其实例定义的私有属性的值跟传入的参数有关系,那么子类继承过来之后,所有子类实例的公有属性的值都是一样的,
//一般都把call继承放在子类函数体中的第一行,这样做的好处就是子类私有的可以替换掉继承过来的结果;

<font color=red>特点</font>:把父类私有的属性和方法克隆一份一模一样的作为子类私有的属性(父类公有的无法继承)

  • 子类公有继承了父类公有的
  • 子类私有继承了父类私有的
  • 而且子类还可以扩展自己的实例公有的属性和方法(扩展到创建的空对象上),而不影响到父类

Object.create():创建一个空对象,并把传入的参数当作空对象的原型;
<font color=red>原理</font>:把父类当作函数在子类中执行,修改函数中的this为子类的实例。用Object.create()创建空对象,并把传入的参数当作空对象的原型,把子类的原型指向空对象的原型。

//创建一个空对象,让传入的参数当作空对象的原型,然后让B的原型指向这个空对象; //为了保证构造函数的完整性,我们要给子类的原型手动设置constructor属性值 //以下写法兼容所有浏览器;

ES6中的继承相当于寄生组合式继承

注意:super()只能用在子类的构造函数之中,用在其他地方会报错 super(name,age);//super中的参数相当于把父类当作普通函数执行时传递给普通函数的参数 //下面为子类的私有属性 //下面为子类公有的方法 关于super的两种情况: 注意,使用super的时候,必须显式指定是作为函数、还是作为对象使用,否则会报错。 只能在子类的构造函数中第一行写super(),此时就相当于Father.call(this);否则会报错(比如在子类的公有方法中执行super); 2、作为普通对象调用时 在子类的静态方法中(把子类当作对象添加的方法),指向父类。

a,b,他们同为类A的实例。因为A在闭包里,所以现在我们是不能直接访问A的,那如果我想给类A增加新方法怎么办?
这个时候就可以通过a.constructor.prototype 来给其所属类添加公有的属性和方法了

css中的盒子模型有两种,分别是 ie 盒子模型和标准 w3c 盒子模型

CSS3盒子模型与IE中的盒子模型

width和height不仅仅是内容的宽度,而是代表整个盒子的宽度(已经包含了padding和border),以后修改的padding或者border,只会影响盒子中内容的高度,盒子的大小不会改变

在网页的顶部加上 <font color="red">!DOCTYPE</font> 声明。假如不加 doctype 声明,那么各个浏览器会根据自己的行为去理解网页,即 ie 浏览器会采用 ie 盒子模型去解释你的盒子,而火狐会采用标准 w3c 盒子模型解释你的盒子,所以网页在不同的浏览器中就显示的不一样了。反之,假如加上了 doctype 声明,那么所有浏览器都会采用标准 w3c 盒子模型去解释你的盒子,网页就能在各个浏览器中显示一致了。

通过JS盒子模型属性获取到的结果都是不带单位的,而且只能是正 数(会默认的进行四舍五入),而且只有scrollTop和scrollLeft可读写,其他都是只读属性;

(只读属性,每次访问都会重新计算,最好用变量保存)
当前盒子可视区域的宽度和高度
可视区域:内容宽高+左右填充padding
和内容是否溢出,以及是否设置了overflow:hidden没有关系

  • 获取当前浏览器可视窗口(一屏幕)的宽度

offsetParent:当前元素的父级参照物(在同一个平面中,最外层的元素是里面所有元素的父级参照,和HTML层级结构没有必然的联系。一个页面中所有的父级参照物都是body。标准流中为body)

**offsetLeft:当前元素距离其父级参照物的内边框的左偏移量 **
offsetTop:当前元素距离其父级参照物的内边框的上偏移量
在IE8当中,是从当前元素的外边框距离其父级参照物的外边框的偏移量
当前元素的外边框距离父级元素参照物内边框的偏移量,父级参照物默认为body

scrollLeft/scrollTop:横向或纵向滚动条卷去的宽度/高度(只有这两个可读写)
存在最大最小值:最小为0,最大为卷去的高度/宽度 - 一屏幕的高度clientHeight

  • 获取当前元素所有写在行内样式上的值(只有写在行内样式上的才能获取到)
  • getComputedStyle(ele,当前元素的伪类一般为null),获取的是一个对象数据类型的值,如果需要获取某一项需要用点或者[]来访问获取结果的某个属性
  • ele.currentStyle (currentStyle是元素的一个属性,而不是一个方法)获取结果也是对象数据类型的,获取某一项也要通过点或者[]来访问;

这两个属性获取的结果都是字符串;

如何让一个盒子水平垂直居中

使用定位,需要知道盒子的具体宽高(兼容IE低版本)
使用定位:不需要知道盒子的宽和高(不兼容IE低版本)
如何让一个宽度不固定的块级元素居中?
首先让盒子先绝对定位,然后设置盒子的left和top值即可
top=(当前浏览器窗口的高度-内容的高度)/2+'px'

设定一个定时器,到达指定时间之后执行对应的方法(执行一次就结束了);

设置一个定时器,每间隔多少时间执行一次fn,直到定时器清除为止(执行很多次)

设置定时器时都会有一个返回值,代表当前是在浏览器中设置的第几个定时器(返回的是定时器的序号,不管是setTimeout还是setInterval,)只要遇到这两个其中一个,就算一个新的定时器,定时器的序号就会加1,即使清除了设置的定时器,也不会重新计算序号。
setTimeout是隔一段时间之后执行一次函数
setInterval是每隔一段时间之后都执行一次函数;

用clearTimeout和clearInterval都可以清除两个中任何一个定时器,传入的参数为定时器的序号;

为什么我们要手动清除定时器?

定时器也是一个函数,函数执行完成后,返回了一个基本数据类型值(定时器的序列号)。没有产生堆内存的话就会在空闲时间被销毁掉,但是为什么setTimeout不会自动销毁?
因为当创建一个定时器的时候,浏览器会同时开启一个监听者,当setTimeout执行完成后,监听者始终知道这个定时器的地址,所以不能销毁,我们要手动去清除定时器。我们手动清除的时候其实就是在切断定时器和监听者之间的联系;这样定时器就会被销毁掉;

定时器中的this问题

不管在哪执行,定时器函数中的this是window;
 
 //也可以用变量保存的方式来改变this

JS是单线程的,当前的任务没有完成,下面的任务是不进行处理的(同步的)

当前的事情没有完成,继续处理当前的事情,只有当前的事件完成了,才会去做下一件事情。(JS中大部分都是同步编程的)如for循环

规划一件事情,但不是当前马上去执行这件事,需要一定时间之后再执行,不会等到时间到了,任务执行完了,才继续完成下面的任务。而是把它放到等待任务队列中,同时开始计算等待时间,继续执行主任务队列中的任务,只有主任务队列中的任务都完成了,再到等待任务队列当中,看哪个先到时间了,就先执行哪个。如果主任务队列中的任务没完成,不会去执行等待任务队列当中的任务;

在JS中的异步编程只有四种:
1、定时器都是异步编程的
2、所有的事件绑定都是异步编程、
3、Ajax读取数据的时候,我们一般都设置为异步编程
4、回调函数也是异步编程

定时器是有最小等待时间的,即使设置为0也不会马上执行,等待时间短的先执行;

同步异步编程的核心原理

JS中有两个任务队列(存放任务列表的空间就是任务队列)
1、主任务队列:同步执行任务;(从上到下执行)
2、等待任务队列:存放异步的任务;
color=red>原理</font>:规划一件事情,但不是当前马上去执行这件事,需要一定时间之后再执行,不会等到时间到了,任务执行完了,才继续完成下面的任务。而是把它放到等待任务队列中,开始计时,继续执行下面的操作,只有主任务队列中的任务都完成了,再到等待任务队列当中,看哪个先到时间了,就先执行哪个,如果都到时间了,那么就看哪个等待的时间短,就先执行哪一个。如果主任务队列中的任务没完成,不会去执行等待任务队列当中的任务;

性能好,实现起来简单,CSS能解决的动画绝对不用其他方式。
不兼容大部分IE或者其他低版本浏览器(移动端的动画一般都是基于CSS3来完成的)

在JS中实现动画常用的有:
1、使用定时器驱动动画,
而所谓的canvas动画基本上也是基于这两种方案完成的(canvas本身是绘图)

非常早的动画处理方案,想要实现动画,需要把这部分制作成Flash影片,然后用Adobe Flash Player插件来播放;现在一些简单的DOM动画都告别了flash的时代,影片的播放也可以基于H5中的audio或者video完成;

JS中基于定时器的动画运动的两种形式

1、限定步长,不限制运动时间;
2、限定运动的总时间,不限制每一步走的长度;公式:

  • time为定时器走一次的时间,zTime为运动总的时间
  • 元素当前所在位置=(time/zTime*总路程+起始位置)

1、此方法只能测试运算时间在1毫秒以上的,

//需要测试消耗时间的代码

2、此方法可以测试运算时间在1毫秒以下的

//需要测试消耗时间的代码

把一个函数当作实参值传递给另外一个函数,在另外一个函数中执行这个函数,这种处理机制就是回调函数机制;
什么时候用到回调函数?
凡是在某一个函数的某一个阶段需要完成某一件事情(而这件事情是不确定的),都可以利用回调函数机制,把需要处理的事情当作值传递进来

//也可以使用以下默认方式(不过不严谨:可能传递的不是函数)

1、回调函数可以被执行多次;
2、还可以给callBack()传递参数值;
3、还可以把回调函数中的this进行修改;
4、我们还可以接收回调函数执行返回的值;

回调函数中的this问题

我们一般执行回调函数的时候都是直接执行回调函数,没有指定执行主体,所以默认情况下都是window;

定时器中的this问题

只要不指明执行主体,定时器中的this就是window.(严格模式下也是window);

关于Each循环方法的封装

类似于JQ中的EACH方法,我们需要支持对数组,类书组,纯对象的遍历任务
需要支持对原有数组的修改(回调函数中的返回值,可以修改原来数组中的某一项值)
在遍历中,通过回调函数返回值,来结束当前正在遍历的操作(回调函数中返回false,我们应该结束对数组的遍历)

(详细内容请参考阮一峰大神的的ES6入门:)

我们之所以可以使用babel命令,是因为在全局环境下会生成一些xxx.cmd的文件,而这里的xxx就是可以在doc窗口中执行的命令
执行babel命令后,可以完成一些编译或者其他任务,原因是执行babel命令后,会自动加载处理任务的文件;
配置.babelrc文件,安装在一些语言解析包
我们需要把.babelrc文件配置在当前项目的根目录下
注意:在电脑上不能直接创建没有文件名的文件,但是可以在webS中new->file来创建,或者使用命令创建
1、babelrc这个后缀名在某些ws中是不识别的,我们需要设置关联
2、在这个文件中编写内容:

"presets":[],//存的是我们编译代码时候需要依赖的语言解析包 "plugins":[]//存的是我们编译代码时候需要依赖的插件信息 ],//存的是我们编译代码时候需要依赖的语言解析包 "plugins":[]//存的是我们编译代码时候需要依赖的插件信息

三、使用命令编译JS代码
基本上所有支持命令操作的模块都有一个命令
babel -d 把某一个文件夹中所有的JS文件中的ES6代码进行编译
babel -w 监听文件中代码的改变,当代码改变后,会自动进行编译

let 变量名=变量值
使用let创建变量和使用var创建变量的区别

  • 1、用var声明的变量会变量提升,用let声明的变量不会进行变量提升
  • 2、用let定义变量不允许在同一个作用域中重复声明一个变量(只要当前作用域中有这个变量,不管是用var还是用let声明的,再用let声明的话会报错:不能重复声明一个变量),但是可以重复定义(赋值)
i=20;重复赋值不会报错
  • 3、暂时性死区:在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
//下面也会报错出现TDZ //作为比较如果一个变量根本没有被声明,使用typeof反而不会报错。
  • 4、ES6语法创建的变量(let)存在块级作用域
  • 函数执行形成的私有作用域 除了有ES5中的两个作用域,ES6中新增加块级作用域(我们可以把块级作用域理解为之前学习的私有作用域,存在私有作用域和作用域链的一些机制)ES6中把大部分用{}包起来的都称之为块级作用域;

const声明的常量只要声明就必须赋值,而且变量的值是一定的,不能被修改;

  • 注意:并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

const声明的变量也存在暂时性死区,即只能在声明的位置之后使用;

JS中创建变量的方式汇总

    ES5中创建变量或者函数:存在变量提升,重复声明等特征;
    ES6中创建的变量或者常量:都不存在变量提升,也不可以重复声明,而且还存在块级作用域;
    class:创建一个类

按照原有值的结构,把原有值中的某一部分内容快速获取到(快速赋值给一个变量)

解构赋值本身是ES6的语法规范,使用什么关键字来声明这些变量是无所谓的,如果不用关键字来声明,那么就相当于给window添加的自定义属性;(严格模式下必须使用关键字来声明,因为严格模式下不允许出现不用关键字声明的变量;),如果解构不到值,那么变量的值就是undefined;

多维数组的解构赋值,可以让我们快速的获取到需要的结果

//数组中不需要解构的值可用逗号(,)空开,一个逗号代表空开一项

在解构赋值中,支持扩展运算符即<font color=red>...</font>,只要用了扩展运算符,就相当于新生成了一个数组或者对象,如果解构不到值的话,新生成的数组或者对象为空,而不是undefined,但是扩展运算符必须放在末尾

对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
如果变量名与属性名不一致,必须写成下面这样。 真正被赋值的是后者,而不是前者。 如果要将一个已经声明的变量用于解构赋值,必须非常小心。 因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。 放在圆括号当中就可以避免 JavaScript

解构赋值中支持指定默认值

1、快速交换两个变量的值

2、可以接收函数返回的多个值

1、扩展运算符(注意,在解构赋值中,叫做扩展运算符,只能放在末尾)
只要用了扩展运算符,就相当于新生成了一个数组或者对象,如果解构不到值的话,新生成的数组或者对象为空,而不是undefined,但是扩展运算符必须放在末尾
 ...arg就相当于剩余运算符,可以把传递的所有参数都获取到,而且获取到的是一个数组
 
 ...arguments:这里的...就相当于展开运算符,把arguments展开,把里面的每一项分别传递给fn1当作参数,然后让fn1执行;
两种写法:1、表达式 2、函数体

1、箭头函数中不支持arguments,但是用 剩余运算...arg 代替了arguments,arg是一个数组,可以直接使用数组方法

//此方法的属性名为fn,属性值为一个函数,和下面的sum写法是一样的; /=>不支持arguments,我们使用ES6中的剩余运算符...来获取传递的进来的所有参数值(优势:使用剩余运算符接收到的结果本身就是一个数组,不需要再转换了) //=>也可以把FN简写成以下方式

2、箭头函数中的this问题,可以默认为箭头函数中没有this,在箭头函数中出现的this都是宿主环境中(即上级作用域中)的this,与箭头函数点之前的执行主体没有任何关系;

ES6中创建类和实例用class,创建出来的类不存在变量提升;
ES5中创建类和实例,以及如何禁止用户把类当做普通函数执行:new.target

//下面为子类的私有属性 super当作对象调用时,super就相当于父类的原型 //下面为子类公有的方法

返回布尔值,字符串中是否包含val所代表的字符串;

val是否在字符串的起始位置。

val是否在字符串的尾部。

三个方法都返回一个布尔值

这三个方法都支持第二个参数,表示开始搜索的位置。

上面代码表示,使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它 针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。

repeat():返回一个新字符串,表示将原字符串重复n次。

模版字符串,也是字符串,可以直接使用字符串中的方法;
模版字符串的空格和换行,都是被保留的,如果想要消除空格可以使用trim方法;

模版字符串中可以嵌入变量,需要将变量写在${}中,大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。

模板字符串之中还能调用函数。

forEach:不支持返回值,只是普通的循环遍历
for in:key输出的值为字符串类型,包括把数组当成对象添加的属性也可以遍历出来
for of:只返回具有数字索引的属性。这一点跟for...in循环也不一样。(不能遍历对象)

//for in是把arr当成对象遍历,i是属性名,包括arr的私有属性 //for of是把arr当成数组遍历,i是数组中的每一项 如果只想拿到索引,可用keys()方法 如果两个都想拿到,可用entries()方法

ES6中的模块导入和导出

//=>A模块(在A模块中导入B模块)
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...

  • 10月8日,今天是国庆后上班的第一天,我决定爬起来写晨间日记。这个动机是源自于昨天翻看印象笔记,读到了16年的工作...

  • 我一直觉得怎么样,才能最后让原本善良的她,变得面目狰狞,直到懂得她的际遇,我才渐渐体会,并且很庆幸她并没有跟我上床...

我要回帖

更多关于 文件夹不压缩怎么发送 的文章

 

随机推荐