原生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的原生方法获取数组中的最大(最小)值
Dec 19 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
Nov 26 Javascript
兼容主流浏览器的JS复制内容到剪贴板
Dec 12 Javascript
JS实现仿苹果底部任务栏菜单效果代码
Aug 28 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
Bootstrap 轮播(Carousel)插件
Dec 26 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
详解用vue-cli来搭建vue项目和webpack
Apr 20 Javascript
vue.js实现条件渲染的实例代码
Jun 22 Javascript
JavaScript无操作后屏保功能的实现方法
Jul 04 Javascript
解析Angular 2+ 样式绑定方式
Jan 15 Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 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使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
php实现可逆加密的方法
2015/08/11 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
easy_install python包安装管理工具介绍
2013/02/10 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
python中for用来遍历range函数的方法
2018/06/08 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
python 绘制正态曲线的示例
2020/09/24 Python
谈谈python垃圾回收机制
2020/09/27 Python
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
四年级下册教学反思
2014/02/01 职场文书
怎么写好自荐书
2014/03/02 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
Python基础之进程详解
2021/05/21 Python