原生JavaScript之es6中Class的用法分析


Posted in Javascript onFebruary 23, 2020

本文实例讲述了原生JavaScript之es6中Class的用法。分享给大家供大家参考,具体如下:

es6class写法

class Point {
 constructor(x, y) {
  this.x = x;
  this.y = y;
 }
 toString() {
  return '(' + this.x + ', ' + this.y + ')';
 }
}

es5写法

function Point(x, y) {
 this.x = x;
 this.y = y;
}
Point.prototype.toString = function () {
 return '(' + this.x + ', ' + this.y + ')';
};
var p = new Point(1, 2);

对比一下

基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用 ES6 的class改写 就是第一个那样

上面代码定义了一个“类”,可以看到里面有一个constructor方法,这就是构造方法,而this关键字则代表实例对象。也就是说,ES5 的构造函数Point,对应 ES6 的Point类的构造方法。

Point类除了构造方法,还定义了一个toString方法。注意,定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。

使用的时候,也是直接对类使用new命令,跟构造函数的用法完全一致。

class Bar {
 doStuff() {
  console.log('stuff');
 }
}
var b = new Bar();
b.doStuff() // "stuff"

其实就是调用原型上的方法。

| `class B {}
let b = new B();

b.constructor === B.prototype.constructor // true`| |

上面代码中,b是B类的实例,它的constructor方法就是B类原型的constructor方法。

constructor 方法

constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。

class Point {
}
// 等同于
class Point {
 constructor() {}
}

上面代码中,定义了一个空的类Point,JavaScript 引擎会自动为它添加一个空的constructor方法。

constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象。

class Foo {
 constructor() {
  return Object.create(null);
 }
}
new Foo() instanceof Foo

静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

class Foo {
 static classMethod() {
  return 'hello';
 }
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()

注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。
父类的静态方法,可以被子类继承

class Foo {
 static classMethod() {
  return 'hello';
 }
}
class Bar extends Foo {
}
Bar.classMethod() // 'hello'

上面代码中,父类Foo有一个静态方法,子类Bar可以调用这个方法。

静态方法也是可以从super对象上调用的。

class Foo {
 static classMethod() {
  return 'hello';
 }
}
class Bar extends Foo {
 static classMethod() {
  return super.classMethod() + ', too';
 }
}
Bar.classMethod() /

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Web层改进II-用xmlhttp 无声息提交复杂表单
Jan 22 Javascript
jQuery 判断页面元素是否存在的代码
Aug 14 Javascript
javascript与CSS复习(二)
Jun 29 Javascript
JavaScript实现的日期控件具体代码
Nov 18 Javascript
javascript对JSON数据排序的3个例子
Apr 12 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
Oct 19 Javascript
vue生成文件本地打开查看效果的实例
Sep 06 Javascript
详解React中合并单元格的正确写法
Jan 08 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
原生JS实现贪吃蛇小游戏
Mar 09 Javascript
vue 点击其他区域关闭自定义div操作
Jul 17 Javascript
原生javascript单例模式的应用实例分析
Feb 23 #Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
Feb 23 #Javascript
webpack.DefinePlugin与cross-env区别详解
Feb 23 #Javascript
深入理解webpack process.env.NODE_ENV配置
Feb 23 #Javascript
微信小程序实现限制用户转发功能的实例代码
Feb 22 #Javascript
vue.js实现简单的计算器功能
Feb 22 #Javascript
Vue.js实现立体计算器
Feb 22 #Javascript
You might like
Ajax PHP分页演示
2007/01/02 PHP
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
php使用GeoIP库实例
2014/06/27 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
js Math 对象的方法
2013/09/01 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
bootstrap Table的一些小操作
2017/11/01 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
Python IDLE入门简介
2017/12/08 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
Python多线程threading创建及使用方法解析
2020/06/17 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
Jar包的作用是什么
2014/03/30 面试题
一年级家长会邀请函
2014/01/25 职场文书
人事助理自荐信
2014/02/02 职场文书
给小学生的新年寄语
2014/04/04 职场文书
农业生产宣传标语
2014/10/08 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
诉讼和解协议书
2016/03/23 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis