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 相关文章推荐
Jquery调用webService远程访问出错的解决方法
May 21 Javascript
js实现在网页上简单显示时间的方法
Mar 02 Javascript
bootstrap输入框组件使用方法详解
Jan 19 Javascript
AngularJS表格添加序号的方法
Mar 03 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
微信小程序实现图片压缩功能
Jan 26 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
Oct 12 Javascript
JS实现碰撞检测效果
Mar 12 Javascript
Javascript文本框脚本实现方法解析
Oct 30 Javascript
在JavaScript中如何使用宏详解
May 06 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
php中OR与|| AND与&&的区别总结
2013/10/26 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
python字符串排序方法
2014/08/29 Python
Python入门篇之字典
2014/10/17 Python
Python中正则表达式详解
2017/05/17 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
python kafka 多线程消费者&手动提交实例
2019/12/21 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
Java模拟试题
2014/11/10 面试题
DELPHI面试题研发笔试试卷
2015/11/08 面试题
初中同学聚会感言
2014/02/11 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
大学班级学风建设方案
2014/05/01 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
七一讲话心得体会
2014/09/05 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
新员工入职感想
2015/08/07 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS
Win10 Anaconda安装python-pcl
2022/04/29 Servers