原生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 相关文章推荐
些很实用且必用的小脚本代码
Jun 26 Javascript
javascript FormatNumber函数实现方法
Dec 30 Javascript
基于jQuery的左右滚动实现代码
Dec 03 Javascript
js控制表单操作的常用代码小结
Aug 15 Javascript
javascript从image转换为base64位编码的String
Jul 29 Javascript
js密码强度校验
Nov 10 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
Mar 19 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
Apr 11 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
详解vue-router 路由元信息
Sep 13 Javascript
vue.js  父向子组件传参的实例代码
Oct 29 Javascript
微信小程序实现点击导航条切换页面
Nov 19 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 实现explort() 功能的详解
2013/06/20 PHP
php遍历目录方法小结
2015/03/10 PHP
浅谈JS函数定义方式的区别
2016/10/30 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
Python实现备份文件实例
2014/09/16 Python
python检测远程udp端口是否打开的方法
2015/03/14 Python
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Python语法快速入门指南
2015/10/12 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
Python实现简单http服务器
2018/04/12 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
C#基础面试题
2016/10/17 面试题
大学生工作推荐信范文
2013/12/02 职场文书
施工员岗位职责
2014/03/16 职场文书
端午节演讲稿
2014/05/23 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
施工员岗位职责
2015/02/10 职场文书
保护动物的宣传语
2015/07/13 职场文书
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS