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 轻松搞定快捷留言功能 只需一行代码
Apr 01 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
JS对select控件option选项的增删改查示例代码
Oct 21 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
Aug 04 Javascript
jquery读写cookie操作实例分析
Dec 24 Javascript
jQuery实现的可编辑表格完整实例
Jun 20 Javascript
AngularJS表格详解及示例代码
Aug 17 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
Mar 04 Javascript
Vue实现购物车功能
Apr 27 Javascript
简单实现js进度条加载效果
Mar 25 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
Jan 25 jQuery
jQuery实现为table表格动态添加或删除tr功能示例
Feb 19 jQuery
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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
理解和运用PHP中的多态性[译]
2011/08/02 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
python用插值法绘制平滑曲线
2021/02/19 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
python有几个版本
2020/06/17 Python
降低python版本的操作方法
2020/09/11 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
大学生个人简历中的自我评价
2013/12/27 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
《菜园里》教学反思
2014/04/17 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
python脚本框架webpy模板赋值实现
2021/11/20 Python