原生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 相关文章推荐
js 覆盖和重载 函数
Sep 25 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
Oct 30 Javascript
JQuery Dialog的内存泄露问题解决方法
Jun 18 Javascript
addEventListener 的用法示例介绍
May 07 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
Jan 16 Javascript
vue之数据交互实例代码
Jun 16 Javascript
React-Native左右联动List的示例代码
Sep 21 Javascript
简单的Vue SSR的示例代码
Jan 12 Javascript
angular 数据绑定之[]和{{}}的区别
Sep 25 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
Mar 12 Javascript
JavaScript中this的学习笔记及用法整理
Feb 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
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
php实现的RSS生成类实例
2015/04/23 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
Python paramiko模块的使用示例
2018/04/11 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
咖啡馆创业计划书
2014/01/26 职场文书
称象教学反思
2014/02/03 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
地方白酒代理协议书
2014/10/25 职场文书
2014年工人工作总结
2014/11/25 职场文书
工程部主管岗位职责
2015/02/12 职场文书
小学三年级作文之写景
2019/11/05 职场文书
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS