003.ES2015和ES2016新特性--类.md

摘要:
ES2016在ES2015的基础上增加了更多语法特性,包括声明静态属性和实例属性。我们来看一个示例:请注意,当直接使用tsc:sample-classes.ts(4,9)进行编译时,将出现以下错误:errorTS1056:访问器仅在针对ECMAScript5或更高版本时可用。您可以参考001中的第1.7节和第3.4节来检查原因并解决问题。ClassHuman{statictotalPeople=0;_name;//ES2016属性声明语法getname(){return this.name;}setname{this.name=val;}constructor{this.name=name;Human.totalPeople+=1;}talk()}return `Hi,我是${this.name};}ClassDevelopmentextendsHuman{_languages;//ES2016属性声明语法构造函数{super;this._languages=languages;}getlanguages(){return this._llanguages;{talk()}return `${super.talk()}我知道${this.languages.join(',')}varhuman=newHuman;vardev=新开发者;控制台日志;您可以简单地使用以下命令运行测试:ts-nodesample-classes.ts在Angular2中定义类是非常常见的。当然,您也可以使用ES5的语法通过使用构造函数来定义类。从语义上讲,这两种方法没有区别。本质上,ES2015中的类将被转换为构造函数。

JavaScript使用的是基于原型的OO模型,用对象字面量或者函数来实例化对象,用原型链来实现继承。
这样对于数据传统C++、Java的OO范式的开发者来说,会感到比较困惑,于是从ES2015开始逐步引入一种新语法用来实现传统OO范式,在新语法的背后,其语义与我们熟悉的旧语法完全相同(使用构造函数以及基于原型的集成),但是,用新的方式来实现OO范式在语法上更加方便,而且更加简洁。
ES2016在ES2015基础上,又添加了更多的语法特性,其中包括声明静态属性和实例属性。
下面看一个例子:

注意,使用tsc直接编译会出现如下错误:

sample-classes.ts(4,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.

可以参考001中的1.7和3.4节查看原因并解决。

class Human{
    static totalPeople = 0;
    _name;//ES2016属性声明语法
    get name(){
        return this._name;
    }
    set name(val){
        this._name = val;
    }
    constructor(name){
        this._name = name;
        Human.totalPeople += 1;
    }
    talk(){
        return `Hi, I'm ${this.name}`;
    }
}
 
class Developer extends Human{
    _languages;//ES2016属性声明语法
    constructor(name, languages){
        super(name);
        this._languages = languages;
    }
    get languages(){
        return this._languages;
    }
 
    talk(){
        return `${super.talk()} And I know
        ${this.languages.join(',')}.`;
    }
}
var human = new Human("foobar");
var dev = new Developer("Gavin", ["JavaScript"]);
console.log(dev.talk());

可以简单的通过如下命令运行测试:

ts-node sample-classes.ts

在Angular2中定义类非常常用。可以用它来定义组件、指令、服务以及管道。当然也可以用ES5的语法,使用构造函数的方式定义类。从语义上讲这两种写法没什么差别,本质上ES2015中的类会被翻译成构造函数。

免责声明:文章转载自《003.ES2015和ES2016新特性--类.md》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Serve允许远程连接的解决方法ASP.NET MVC 提供与访问 Web Api下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java继承中的super()关键字

super关键字 super 表示使用它的类的父类。super 可用于: 调用父类的构造方法; 调用父类的方法(子类覆盖了父类的方法时); 访问父类的数据域(可以这样用但没有必要这样用)。 调用父类的构造方法语法: super(); 或 super(参数列表); 注意:super 语句必须是子类构造方法的第一条语句。不能在子类中使用父类...

C#--反射基础

以下是学习笔记: 一,反射的基本信息 DLL/EXE: 主要区别EXE文件有一个入口,DLL文件不能运行,但是DLL能拿到其他地方去使用 metadata(元数据):描述exe/dll文件的一个清单,记录了exe/dll文件中有哪些类,属性,特性,字段。。。 Reflection(反射):用来操作或获取元数据metadata 有什么作用: 1,更新程序(...

【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码

说明: 本文參考官方Ref Guide,Developer API和众多博客。并结合实測代码编写。具体总结HBase的Filter功能,并附上每类Filter的对应代码实现。 本文尽量遵从Ref Guide中“9.4. Client Request Filters”的行文顺序,便于读者对照查看,但内容比官方文档更加详实。 ***2014年7月18日...

使用Intent实现Activity的显式跳转

【正文】 这里以按钮实现活动跳转为例,为实现这个功能,我们需要三个步骤: 1.点击按钮才发生页面跳转,因此,第一步我们先要找到要点击的按钮 如何拿到按钮对象呢?通过资源id,前面我们提到过,在R.id.xxx 中会有我们的资源id,但button按钮是在layout 中创建的,系统不会为其创建资源id,所以我们需要在layout 设置 button 时自己...

JavaScript 的继承与多态

本文先对es6发布之前javascript各种继承实现方式进行深入的分析比较,然后再介绍es6中对类继承的支持以及优缺点讨论。最后介绍了javascript面向对象编程中很少被涉及的“多态”,并提供了“运算符重载”的思路。本文假设你已经知道或了解了js中原型、原型链的概念。 es6之前,javascript本质上不能算是一门面向对象的编程语言,因为它对...

Java中类加载过程和对象创建过程

类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在。如果有,就直接使用;如果没有,则把相关类的.class加载到方法区 2, 在.class加载到方法区时,会分为两部分加载:先加载非静态内容,再加载静态内容 3, 加载非静态内容:把.class中的所有非静态内容加载到方法区下的非静态区域内 4, 加载静态内容:     4.1、把.c...