es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析


Posted in Javascript onFebruary 15, 2020

本文实例讲述了es6中class类静态方法,静态属性,实例属性,实例方法。分享给大家供大家参考,具体如下:

es6新增了一种定义对象实例的方法,使用class关键字定义类,与class相关的知识点也逐步火热起来,但是部分理解起来相对抽象,简单对class相关的知识点进行总结,更好的使用class。对于基本概念,请参见阮一峰老师的es6入门教程。本文主要总结class静态相关。

关于类有两个概念,1,类自身,;2,类的实例对象

总的来说:静态的是指向类自身,而不是指向实例对象,主要是归属不同,这是静态属性的核心。

难点1:静态方法的理解

class Foo {
 static classMethod() {
  return 'hello';
 }
}

静态方法使用:在方法前加上static关键字

为什么使用静态方法:阻止方法被实例继承,类的内部相当于实例的原型,所有在类中直接定义的方法相当于在原型上定义方法,都会被类的实例继承,但是使用static静态方法定义的不会被实例继承,而且可以被实例直接应用Foo.classMethod(),此时写成new Foo.classMethod()会提示不存在此方法

静态方法中this指向:this指向类而不是类的实例

class Foo {
 static bar () {
  this.baz();
 }
 static baz () {
  console.log('hello');
 }
 baz () {
  console.log('world');
 }
}
Foo.bar() // hello

继承相关:静态方法可以被子类继承,也可以被super调用

难点2:静态属性的理解,以及和实例属性的区别

理解了静态的本质就知道静态属性是class类自身的属性

相对的实例属性是指类的实例的属性,调用时使用 new Foo().'属性名'

定义实例属性的方法:2种

类的实例属性可以用等式,写入类的定义之中

1,在类中定义

class MyClass {
 myProp = 42;
 constructor() {
  console.log(this.myProp); // 42
 }
}
//上面代码中,myProp就是MyClass的实例属性。在MyClass的实例上,可以读取这个属性。

2,在constructor中定义(react中经典写法)

class ReactCounter extends React.Component {
 constructor(props) {
  super(props);
  this.state = {
   count: 0
  };
 }
}
//等价于
class ReactCounter extends React.Component {
 state = {
  count: 0
 };
}

定义静态方法,

1,就和普通的Object添加属性一样,object.a = a;(目前唯一一种方法)

缺点:老写法的静态属性定义在类的外部。整个类生成以后,再生成静态属性。容易忽略

2,静态属性的提案: 相对于实例方法定义,在定义实例方法的前面加上static关键字,该方法未发布

class MyClass {
 static myStaticProp = 42;
 constructor() {
  console.log(MyClass.myStaticProp); // 42
 }
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
深入理解Javascript动态方法调用与参数修改的问题
Dec 10 Javascript
通过隐藏iframe实现文件下载的js方法介绍
Feb 26 Javascript
JavaScript Promise启示录
Aug 12 Javascript
javascript转换日期字符串为Date日期对象的方法
Feb 13 Javascript
js变形金刚文字特效代码分享
Aug 20 Javascript
Javascript中关于Array.filter()的妙用详解
Dec 04 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
layer弹窗插件操作方法详解
May 19 Javascript
animate.css在vue项目中的使用教程
Aug 05 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
Sep 05 Javascript
vue双向绑定数据限制长度的方法
Nov 04 Javascript
Vue 中 a标签上href无法跳转的解决方式
Nov 12 Javascript
Vue父子传递实例讲解
Feb 14 #Javascript
Javascript操作select控件代码实例
Feb 14 #Javascript
微信小程序复选框实现多选一功能过程解析
Feb 14 #Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
Feb 14 #Javascript
node事件循环和process模块实例分析
Feb 14 #Javascript
vue+springboot图片上传和显示的示例代码
Feb 14 #Javascript
JavaScript简单编程实例学习
Feb 14 #Javascript
You might like
德生9700DX电路分析
2021/03/02 无线电
php防盗链的常用方法小结
2010/07/02 PHP
phpize的深入理解
2013/06/03 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
JavaScript 继承详解 第一篇
2009/08/30 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
Python之re操作方法(详解)
2017/06/14 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
python地震数据可视化详解
2019/06/18 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
物业经理求职自我评价
2013/09/22 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
三好学生事迹材料
2014/12/24 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS