原生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 相关文章推荐
htm调用JS代码
Mar 15 Javascript
jQuery 版本的文本输入框检查器Input Check
Jul 09 Javascript
js常用代码段整理
Nov 30 Javascript
angularjs实现与服务器交互分享
Jun 24 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
Jul 28 Javascript
js实现分割上传大文件
Mar 09 Javascript
webpack处理 css\less\sass 样式的方法
Aug 21 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
vue视图不更新情况详解
May 16 Javascript
JS性能优化实现方法及优点进行
Aug 30 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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
php绘制一个矩形的方法
2015/01/24 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
RequireJs的使用详解
2017/02/19 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
分析javascript原型及原型链
2018/03/18 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
独特的python循环语句
2016/11/20 Python
python学习教程之使用py2exe打包
2017/09/24 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
python实现飞机大战游戏
2020/10/26 Python
python统计字符的个数代码实例
2020/02/07 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
新郎婚宴答谢词
2014/01/19 职场文书
启动仪式策划方案
2014/06/14 职场文书
支行行长竞聘报告
2014/11/06 职场文书
培训后的感想
2015/08/07 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书