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 元素控制(追加元素/追加内容)介绍及应用
Apr 21 Javascript
struts2+jquery+json实现异步加载数据(自写)
Jun 24 Javascript
AngularJS教程 ng-style 指令简单示例
Aug 03 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 Javascript
浅谈Angular.js中使用$watch监听模型变化
Jan 10 Javascript
MUI  Scroll插件的使用详解
Apr 13 Javascript
Vue的MVVM实现方法
Aug 16 Javascript
安装vue-cli报错 -4058 的解决方法
Oct 19 Javascript
详解如何使用webpack在vue项目中写jsx语法
Nov 08 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 Javascript
js实现贪吃蛇小游戏
Oct 29 Javascript
keep-alive保持组件状态的方法
Dec 02 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
python中正则表达式的使用详解
2014/10/17 Python
python查看模块安装位置的方法
2018/10/16 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
什么是python的函数体
2020/06/19 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
捷克时尚网上商店:OTTO
2018/03/15 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
new修饰符是起什么作用
2015/06/28 面试题
文科毕业生自荐书范文
2014/04/17 职场文书
公司节能减排方案
2014/05/16 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
2016教师节问候语
2015/11/10 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
党员公开承诺书2016
2016/03/24 职场文书
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle