原生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 29 Javascript
使用jscript实现二进制读写脚本代码
Jun 09 Javascript
JavaScript Date对象使用总结
May 14 Javascript
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
JsRender for index循环索引用法详解
Oct 31 Javascript
jquery常用函数与方法汇总
Sep 01 Javascript
AngularJS中比较两个数组是否相同
Aug 24 Javascript
BootStrap入门教程(二)之固定的内置样式
Sep 19 Javascript
微信小程序 switch组件详解及简单实例
Jan 10 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
Dec 18 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
Mar 06 Javascript
jQuery 查找元素操作实例小结
Oct 02 jQuery
原生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上传文件常见问题总结
2015/02/03 PHP
Javascript Select操作大集合
2009/05/26 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
Python之py2exe打包工具详解
2017/06/14 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
python实现小世界网络生成
2019/11/21 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
车间班组长的职责
2013/12/13 职场文书
网上书店创业计划书
2014/01/12 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
酒店节能降耗方案
2014/05/08 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
公司授权委托书范文
2014/09/21 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
2015新学期家长寄语
2015/02/26 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
分析Netty直接内存原理及应用
2021/06/14 Java/Android
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技