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 validator 插件增加日期比较方法
Feb 21 Javascript
精通Javascript系列之Javascript基础篇
Jun 07 Javascript
js中继承的几种用法总结(apply,call,prototype)
Dec 26 Javascript
JQuery实现鼠标滚轮滑动到页面节点
Jul 28 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
Aug 20 Javascript
微信小程序 wx.request方法的异步封装实例详解
May 18 Javascript
vue如何从接口请求数据
Jun 22 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
tweenjs缓动算法的使用实例分析
Aug 26 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
JS实现分页导航效果
Feb 19 Javascript
JS数据类型分类及常用判断方法
Nov 19 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实现阳历到农历转换的类实例
2015/03/07 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
js返回顶部实例分享
2016/12/21 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
js实现图片实时时钟
2020/01/15 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
python实现sublime3的less编译插件示例
2014/04/27 Python
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
python字典排序实例详解
2015/05/20 Python
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
Python中的 enum 模块源码详析
2019/01/09 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
Pycharm小白级简单使用教程
2020/01/08 Python
10张动图学会python循环与递归问题
2021/02/06 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
shell程序中如何注释
2012/02/17 面试题
高三历史教学反思
2014/01/09 职场文书
创意活动策划书
2014/01/15 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
财务会计实训报告
2014/11/05 职场文书
教师节表彰会主持词
2015/07/06 职场文书
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js