博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs与ES6系列4:ES6中的类
阅读量:6265 次
发布时间:2019-06-22

本文共 1966 字,大约阅读时间需要 6 分钟。

ES6中的类

4.1、class基本语法

在之前的javascript语法中是不存在class这样的概念,如果要通过构造函数生成一个新对象代码

function Shape(width,height){  this.width = width;  this.height = height;}Point.prototype.toString = function () {  return '(' + this.width + ', ' + this.height + ')';}

ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用ES6的“类”改写,就是下面这样。

//定义类class Shape {  constructor(width, height) {    this.height = height;    this.width = width;  }  toString() {    return '(' + this.width + ', ' + this.height + ')';  }}

通过class定义类名,constructor关键字定义构造函数。

4.2、继承与多态

继承与多态是面向对象最重要的两个特性,通过继承可以实现代码的重构,在之前的javascript中继承需要通过原型链来实现,而在ES6中可以通过extends关键字直观的实现继承。首先定义基类Shape,定义子类Rect集成与基类并重写方法toArea实现多态。

'use strict'class Shape {    constructor(width,height){        this.width=width;        this.height=height;    }    /***     * 获取面积     * @returns {number}     */    toArea(){        return this.width*this.height    }}module.exports = Shape;
'use strict'var Shape = require('./Shape');class Rect extends Shape {    constructor(width, height) {        super(width, height);    }    toArea() {        return this.width*this.height*2    }}module .exports = Rect;

子类Rect集成与基类Shape,拥有了基类的方法toArea,和属性width与height,而子类通过相同的方法名重写了方法toArea。

var sharp = new Sharp(1,2);var rect = new Rect(1,2);console.log(sharp.toArea());console.log(rect.toArea());====24

4.3、类的静态方法

ES6中的类提供静态方法,静态方法只能在类成员下调用,如果类实例化后再调用会抛出异常。同样的基类定义的静态方法能被子类所继承。静态方法通过static关键字定义。

'use strict'class Shape {    constructor(width,height){        this.width=width;        this.height=height;    }    /***     * 获取面积     * @returns {number}     */    toArea(){        return this.width*this.height    }    /**     * 静态方法     * @returns {string}     */    static toName(){        return 'shape'    }}module.exports = Shape;
console.log(Rect.toName());===shape

值得注意的是在ES6的类中并没有静态属性的概念。静态属性可以通过Shape.name这样来定义。

转载于:https://www.cnblogs.com/vipyoumay/p/5598017.html

你可能感兴趣的文章
Winform开发框架之权限管理系统改进的经验总结(4)--用户分级管理
查看>>
SQLSERVER PRINT语句的换行
查看>>
Web Service 的工作原理
查看>>
tesseract ocr文字识别Android实例程序和训练工具全部源代码
查看>>
嵌入式操作系统的调试
查看>>
DroidPHP-A PHP Webserver for android
查看>>
iOS用全局宏的概念理解xcode中的设置 preprocessor macros
查看>>
浮沉乱世,一些话对自己说
查看>>
桌面应用框架 OneRing
查看>>
解决Boost.Regex对中文支持不好的问题
查看>>
Error : Weblogic Maven Plugin deployment WebLogic 12c
查看>>
W3C小组宣布:HTML5标准制定完成
查看>>
dispatch_group_async 使用详解
查看>>
3d引擎列表
查看>>
[Ant] Ant之MacroDef—“宏
查看>>
WEB架构师成长之路-架构师都要懂哪些知识 转
查看>>
C#中使用TCP通信
查看>>
Swift入门篇-swift简介
查看>>
05 继承
查看>>
弧度和角度的转换
查看>>