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 相关文章推荐
JS hashMap实例详解
May 26 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
jquery实现input框获取焦点的方法
Feb 06 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
jQuery返回定位插件详解
May 15 jQuery
浅谈vue实现数据监听的函数 Object.defineProperty
Jun 08 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
Jun 14 Javascript
js学习总结之dom2级事件基础知识详解
Jul 27 Javascript
详解JavaScript中的坐标和距离
May 27 Javascript
js实现无缝轮播图
Mar 09 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 Javascript
javascript拖曳互换div的位置实现示例
Jun 28 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
php下拉选项的批量操作的实现代码
2013/10/14 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
详解如何更好的使用module vuex
2019/03/27 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
python实现批量图片格式转换
2020/06/16 Python
python实现按行分割文件
2019/07/22 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
Django模板语言 Tags使用详解
2019/09/09 Python
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
关爱留守儿童倡议书
2014/04/15 职场文书
北京奥运会口号
2014/06/21 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
大学推普周活动总结
2015/05/07 职场文书
酒店开业主持词
2015/07/02 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript