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的更多相关文章

  1. 002.ES2015和ES2016新特性--箭头函数.md

    1. ES2015中的箭头函数 JavaScript有一级函数的特性,也就是说,函数像其他值一样可以当成参数传来传去. var result = [1,2,3].reduce(function(tot ...

  2. 004.ES2015和ES2016新特性--块级作用域变量

    其基本原理就是JavaScript的作用域链,下面以对比的方式来展示一下函数级作用域和块级作用域. 函数级作用域 var fns = []; for (var i = 0; i < 5 ; i+ ...

  3. 前端笔记之ES678&Webpack&Babel(中)对象|字符串|数组的扩展&函数新特性&类

    一.对象的扩展 1.1对象属性名表达式 ES6可以在JSON中使用[]包裹一个key的名字.此时这个key将用表达式作为属性名(被当做变量求值),这个key值必须是字符串. var a = 'name ...

  4. 2.ES6引进的新特性——类Class

    为什么? ES6中引入了类,类在java/c++等面向对象的编程语言常见,JS引入类是为了在日后使用js开发大型的应用程序,类本质是语法糖(语法上更加人性化) 以前写一个类 function User ...

  5. 005.ES2016新特性--装饰器

    装饰器在设计阶段可以对类和属性进行注释和修改,在Angular2中装饰器非常常用,可以用来定义组件.指令以及管道,并且可以与框架提供的依赖注入机制配合使用. 从本质上上讲,装饰器的最大作用是修改预定义 ...

  6. vue3.0新特性以及进阶路线

    Vue3.0新特性/改动 新手学习路线  ===> 起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要 ...

  7. IBM Developer:Java 9 新特性概述

    Author: 成富 Date: Dec 28, 2017 Category: IBM-Developer (20) Tags: Java (27) 原文地址:https://www.ibm.com/ ...

  8. java-API中的常用类,新特性之-泛型,高级For循环,可变参数

    API中的常用类 System类System类包含一些有用的类字段和方法.它不能被实例化.属性和方法都是静态的. out,标准输出,默认打印在控制台上.通过和PrintStream打印流中的方法组合构 ...

  9. C++新特性(类)(转载)

    C++新特性(类)里面讲的很清楚,转给大家分享一下 类机制: 类是对某一类对象的抽象:对象是某一类的实例: 类是一种复杂的数据类型,将不同类型的数据和这些数据相关的操作封装在一起的集合体: 通过一道程 ...

随机推荐

  1. Hibernate中的HQL

    一.查询所有的时候 List<Company> list=session.createQuery("from Company as c order by c.cid desc&q ...

  2. MonkeyRunner源代码分析之启动

    在工作中由于要追求完毕目标的效率,所以很多其它是强调实战.注重招式.关注怎么去用各种框架来实现目的.可是假设一味仅仅是注重招式.缺少对原理这个内功的了解,相信自己非常难对各种框架有更深入的理解. 从几 ...

  3. TRIZ系列-创新原理-34-抛弃和再生部件原理

    抛弃和再生部件原理的详细描写叙述例如以下:1)物件的部件在完毕其功能,或者变得没用之后,就被扔掉(丢弃.溶解,挥发等),或者在工作过程已经改变.2)物体已经用掉的部件,应该在工作期间恢复: 对于抛弃原 ...

  4. jquery时间格式化插件

    插件的代码: (function($){ $.formatDate = function(pattern,date){ //假设不设置,默觉得当前时间 if(!date) date = new Dat ...

  5. JAVA设计模式之【状态模式】

    状态模式 水.固态.气态.液态 账户.正常状态.透支状态.受限状态 状态模式中,用一个状态类来分散冗长的条件语句,让系统有灵活性和可扩展性 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的 ...

  6. div在父集高度未知的情况下垂直居中的方法

    父集高度未知,子集高度已知: 可以使用弹性盒来解决: justify-content属性定义了项目在主轴上的对齐方式. align-items属性定义项目在交叉轴上如何对齐.

  7. 寻找两个有序数组的中位数 C++实现leetcode系列(四)

    给定两个大小为 m 和 n 的有序数组 nums1和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不 ...

  8. 循环访问 TreeView 控件的所有节点

    创建测试每个节点的递归过程 . private void PrintRecursive(TreeNode treeNode) { // Print the node. System.Diagnosti ...

  9. Linux 清空缓存

    sync echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys ...

  10. LCT笔记

    先存个代码 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> ...