ECMAScript 6 学习笔记(一)

必然有诸多少人跟小编刚看到那项条件的时候同样,对那几个条件的名字充满嫌疑。其实原因便是那项条件最早是在1986年,由德克萨斯奥斯汀分校高校的1位姓里的农妇(BarbaraLiskov)提议来的。

ECMAScript 6简介

定义1:设若对每1个门类为 T1的靶子 o1,都有档次为 T2
的靶子o2,使得以 T1定义的具备程序 P 在全部的目的 o1 都代换到 o2 时,程序
P 的行事并未发生变化,那么类型 T2 是项目 T1 的子类型。

  ECMAScript
6.0(以下简称ES6)是JavaScript语言的晚辈标准,已经在2014年5月正规宣布了。它的对象,是驱动JavaScript语言能够用来编排复杂的大型应用程序,成为商户级开发语言。

定义2:具备引用基类的地点必须能透明地运用其子类的靶子。

行业内部的制定者有铺排,以往每年发表一回正式,使用年份作为版本。因为ES6的第③个版本是在二〇一四年宣布的,所以又称ECMAScript
2016(简称ES2014)。

题材原因:有一效应P1,由类A实现。现须要将功效P1进行扩大,扩张后的职能为P,当中P由原有功能P1与新职能P2组成。新效用P由类A的子类B来成功,则子类B在做到新效用P2的同时,有或者会造成原有效能P1产生故障。

二〇一四年七月,大幅修订的《ECMAScript 贰零壹伍 标准》(简称
ES二〇一六)如期发表。由于改变相当小(只新增了数组实例的includes办法和指数运算符),因此ES2016 与 ES二零一四 基本上是同一个正式,都被看成是
ES6。依据安顿,二〇一七年八月将宣布 ES2017

焚林而猎方案:当使用持续时,遵从里氏替换原则。类B继承类A时,除添加新的方式成功新增成效P2外,尽量不要重写父类A的法子,也尽量不要重载父类A的法子。

 

        
继承包罗那样一层含义:父类中凡是已经落成好的不二法门(相对于肤浅方法而言),实际上是在设定一多重的正规和契约,纵然它不强制供给具有的子类必须遵循这几个契约,但是一旦子类对这么些非抽象方法任意修改,就会对全数继承类别造成破坏。而里氏替换原则就是表达了这一层意思。

ECMAScript和JavaScript的关系

       
继承作为面向对象三大特点之一,在给程序设计带来巨大便利的还要,也拉动了弊端。比如利用持续会给程序带来侵入性,程序的可移植性降低,增加了目的间的耦合性,假诺一个类被其余的类所继承,则当以此类必要修改时,必须考虑到具备的子类,并且父类修改后,全数关乎到子类的效果都有或许会发生故障。

  三个大面积的题材是,ECMAScript和JavaScript到底是哪些关联?

       
举例表明继承的高风险,大家需求形成二个两数相减的功效,由类A来顶住。

要讲领会这几个标题,供给回想历史。一九九八年六月,JavaScript的制造者Netscape企业,决定将JavaScript提交给国际规则组织ECMA,希望那种语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第①版,规定了浏览器脚本语言的标准,并将那种语言称为ECMAScript,那么些本子就是1.0版。

起名 1起名 2

该专业从一初始正是本着JavaScript语言制定的,可是就此不叫JavaScript,有五个原因。一是商标,Java是Sun公司的商标,依照授权协议,唯有Netscape公司得以合法地接纳JavaScript这么些名字,且JavaScript本身也曾经被Netscape企登为商标。二是想体现那门语言的制定者是ECMA,不是Netscape,那样有利于确认保证那门语言的开放性和中立性。

 1 class A{
 2     public int func1(int a, int b){
 3         return a-b;
 4     }
 5 }
 6 
 7 public class Client{
 8     public static void main(String[] args){
 9         A a = new A();
10         System.out.println("100-50="+a.func1(100, 50));
11         System.out.println("100-80="+a.func1(100, 80));
12     }
13 }

故此,ECMAScript和JavaScript的关联是,前者是继承者的尺度,后者是前者的一种达成(其余的ECMAScript方言还有Jscript和ActionScript)。通常地方,那四个词是足以交换的。

View Code

 

运作结果:

ECMAScript的历史

100-50=50
100-80=20

  ECMAScript 1.0是1998年布告的,接下去的两年,连续颁发了ECMAScript
2.0(1996年五月)和ECMAScript
3.0(1998年六月)。3.0版是一个伟人的功成名就,在产业界获得大面积支持,成为交通标准,奠定了JavaScript语言的宗旨语法,未来的版本完全继承。直到明日,初学者一先河读书JavaScript,其实正是在学3.0版的语法。

       
后来,大家供给追加3个新的遵循:完结两数相加,然后再与100求和,由类B来顶住。即类B必要形成八个职能:

  两千年,ECMAScript
4.0开头商讨。这一个版本最后没有经过,不过它的多数剧情被ES6继续了。由此,ES6制订的起源其实是2000年。

  • 起名,两数相减。
  • 两数相加,然后再加100。

干什么ES4没有经过呢?因为这些版本太激进了,对ES3做了根本升级,导致标准委员会的局地分子不乐意承受。ECMA的第叁9号技术专家委员会(Technical
Committee
39,简称TC39)负责制订ECMAScript标准,成员包罗Microsoft、Mozilla、谷歌等大商店。

       
由于类A已经达成了第①个效益,所以类B继承类A后,只须要再形成第三个效用就能够了,代码如下:

  2005年3月,ECMAScript
4.0版草案公布,本来测度次年八月宣布标准版本。可是,各方对此是还是不是由此那些专业,发生了深重分裂。以Yahoo、Microsoft、谷歌(Google)为首的大商店,反对JavaScript的大幅度进步,主张大幅变动;以JavaScript创立者Brendan
Eich为首的Mozilla公司,则坚称当前的草案。

起名 3起名 4

  二零一零年5月,由于对于下三个本子应该包含怎么样作用,各方分化太大,争持过于激烈,ECMA开会决定,中止ECMAScript
4.0的开发,将中间涉嫌现有成效改革的一小部分,公布为ECMAScript
3.1,而将其余激进的考虑扩充范围,放入将来的版本,由于会议的气氛,该版本的连串代号起名为Harmony(和谐)。会后赶紧,ECMAScript
3.1就改名为ECMAScript 5。

 1 class B extends A{
 2     public int func1(int a, int b){
 3         return a+b;
 4     }
 5     
 6     public int func2(int a, int b){
 7         return func1(a,b)+100;
 8     }
 9 }
10 
11 public class Client{
12     public static void main(String[] args){
13         B b = new B();
14         System.out.println("100-50="+b.func1(100, 50));
15         System.out.println("100-80="+b.func1(100, 80));
16         System.out.println("100+20+100="+b.func2(100, 20));
17     }
18 }

  2010年5月,ECMAScript
5.0版正式宣布。Harmony项目则一分为二,一些较为有效的考虑定名为JavaScript.next继续支付,后来衍生和变化成ECMAScript
6;一些不是很成熟的考虑,则被视为JavaScript.next.next,在更远的未来再考虑推出。TC39委员会的总体考虑是,ES5与ES3为主保持卓殊,较大的语法改良和新职能进入,将由JavaScript.next完结。当时,JavaScript.next指的是ES6,第伍版发表之后,就指ES7。TC39的判断是,ES5会在二〇一二年的年中成为JavaScript开发的主流标准,并在后来五年中一向维系那一个职位。

View Code

  二〇一一年3月,ECMAscript 5.1版发表,并且变成ISO国际标准(ISO/IEC
16262:二零一二)。

类B实现后,运维结果:

  2012年7月,ECMAScript
6草案冻结,不再添加新职能。新的功用设想将被置于ECMAScript 7。

100-50=150
100-80=180
100+20+100=220

  2011年十二月,ECMAScript
6草案发表。然后是十个月的研讨期,听取各方反映。

       
大家发现原先运营符合规律的相减功用发生了不当。原因正是类B在给艺术起名时无意中重写了父类的方法,造成全体运维相减功用的代码全部调用了类B重写后的法子,造成原本运维如常的功用现身了不当。在本例中,引用基类A完毕的职能,换来子类B之后,产生了老大。在实质上编制程序中,大家平日会透过重写父类的法门来成功新的功力,那样写起来即便简易,可是全数继承种类的可复用性会比较差,尤其是采纳多态相比频仍时,程序运营出错的概率一点都不小。假如非要重写父类的不二法门,比较通用的做法是:原来的父类和子类都持续四个更通俗的基类,原有的三番五次关系去掉,采取信赖、聚合,组合等事关代替。

  二〇一四年1月,ECMAScript
6正式通过,成为国际标准。从3000年算起,那时早已过去了15年。

       
里氏替换原则通俗的来讲正是:子类可以扩充父类的效应,但无法更改父类原有的效应。它含有以下4层意思:

  • 子类可以达成父类的悬空方法,但无法掩盖父类的非抽象方法。
  • 子类中得以追加自个儿故意的办法。
  • 当子类的法门重载父类的法门时,方法的停放条件(即方法的形参)要比父类方法的输入参数更宽松。
  • 当子类的方式落成父类的望梅止渴方法时,方法的前置条件(即方法的重回值)要比父类更严苛。

       
看上去很莫明其妙,因为我们会发觉在友好编制程序中时时会背离里氏替换原则,程序还是跑的好好的。所以大家都会产生那样的问号,若是作者非要不根据里氏替换原则会有如何结果?

        后果就是:您写的代码出题指标概率将会大大增添。

转自:http://blog.csdn.net/zhengzhb/article/details/7281833

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图