原生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 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
js如何判断用户是在PC端和还是移动端访问
Apr 24 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
May 29 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
Jan 22 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 Javascript
关于input全选反选恶心的异常情况
Jul 24 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
Aug 02 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
AngularJS ionic手势事件的使用总结
Aug 09 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
Feb 24 Javascript
JS对象和字符串之间互换操作实例分析
Feb 02 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
php数据库密码的找回的步骤
2011/01/12 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
Django的数据模型访问多对多键值的方法
2015/07/21 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
python sys.argv[]用法实例详解
2018/05/25 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
python给list排序的简单方法
2020/12/10 Python
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
物业招聘计划书
2014/01/10 职场文书
大学生自我鉴定书
2014/03/24 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
春晚观后感
2015/06/11 职场文书
赞助商致辞
2015/07/30 职场文书
高中团支书竞选稿
2015/11/21 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
pytorch 实现在测试的时候启用dropout
2021/05/27 Python