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实现计算加载页面所用的时间
Apr 02 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
Jan 08 Javascript
Jquery实现仿腾讯微博发表广播
Nov 17 Javascript
基于JavaScript实现移动端TAB触屏切换效果
Oct 20 Javascript
AngularJS控制器之间的数据共享及通信详解
Aug 01 Javascript
js封装tab标签页实例分享
Dec 19 Javascript
详解从新建vue项目到引入组件Element的方法
Aug 29 Javascript
JS库之Three.js 简易入门教程(详解之一)
Sep 13 Javascript
EL表达式截取字符串的函数说明
Sep 22 Javascript
vue实现仿淘宝结账页面实例代码
Nov 08 Javascript
JS实现区分中英文并统计字符个数的方法示例
Jun 09 Javascript
jquery实现弹窗(系统提示框)效果
Dec 10 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
PHP $_FILES函数详解
2011/03/09 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python之PyUnit单元测试实例
2014/10/11 Python
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
python如何将图片转换为字符图片
2020/08/19 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
深入浅析Python中的迭代器
2019/06/04 Python
python 实现单通道转3通道
2019/12/03 Python
python time.strptime格式化实例详解
2021/02/03 Python
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
医药销售求职信范文
2014/02/01 职场文书
关于读书的演讲稿
2014/05/07 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
幸福中国演讲稿
2014/09/12 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
民政工作个人总结
2015/02/28 职场文书
毕业设计致谢词
2015/05/14 职场文书
鲁冰花观后感
2015/06/10 职场文书