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. Android动态载入JAR包的实现方法

    有时候我们须要使用动态更新技术,简单来说就是:当我们把开发jar包发送给用户后.假设后期升级了部分代码.这时让用户的jar包自己主动更新,而不是用户主动手动地去更新的技术就是动态更新.这个须要使用的技 ...

  2. nyoj--90--整数划分(母函数)

    整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,  其中n1≥n2≥-≥nk≥1,k≥1.  正整数 ...

  3. 理解class.forName()(good--字节码层面)

    使用jdbc方式连接数据库时会使用一句代码Class.forName(String className).这句话是什么意思呢?首先说一点Class.forName(String className)这 ...

  4. html5+css3+javascript 自定义弹出窗口

    效果图: 源码: 1.demo.jsp <%@ page contentType="text/html;charset=UTF-8" language="java& ...

  5. Java数据库连接——PreparedStatement的使用

    首先了解Statement和PreparedStatement的区别: 由此可见,一般使用PreparedStatement. 操作数据库SU(Course表),其中Course属性有Cno,Cnam ...

  6. ZBrush中独特功能Projection Master

    Projection Master可以理解为投影大师,它是ZBrush®的一个独特功能,该功能可以让用户使用所有的2D和2.5D笔刷工具在3D模型上进行雕刻.纹理绘制和其他的操作. 简单来说,Proj ...

  7. js禁止某个页面的回退

    ;!function(pkg, undefined){ var STATE = 'x-back'; var element; var onPopState = function(event){ eve ...

  8. 使用VUE开发微信小程序

    使用 mpvue 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力: 彻底的组件化开发能力:提高代码复用性完整的 Vue.js 开发体验方便的 Vuex 数据管理方案:方便构建复杂应用快捷的 ...

  9. 学习《PythonWeb开发实战(董伟明)》中文PDF+源代码

    python可以用了进行数据分析,也可以进行Web开发,一般会使用django或者flask等进行开发. 国内介绍python web的书有写的不错的,推荐看看<PythonWeb开发实战> ...

  10. Python3+Gurobi使用教程(一)

    Gurobi使用教程 1.Gurobi使用的一般框架 from gurobipy import * try: m=Model('modelname') except GurobiError: prin ...