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 给汉字排序实例代码
Jun 28 Javascript
Javascript 继承机制实例
Aug 12 Javascript
js转html实体的方法
Sep 27 Javascript
ES6入门教程之let和const命令详解
May 17 Javascript
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
JS实现元素上下左右移动效果
Oct 18 Javascript
基于vue 动态加载图片src的解决方法
Feb 05 Javascript
jQuery获取随机颜色的实例代码
May 21 jQuery
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 Javascript
Node.js Windows Binary二进制文件安装方法
May 16 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
Nov 12 Javascript
微信小程序实现导航栏和内容上下联动功能代码
Jun 29 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文件的实现方法
2007/03/19 PHP
php实现简单洗牌算法
2013/06/18 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
node.js的Express服务器基本使用教程
2019/01/09 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
单位创先争优活动方案
2014/01/26 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
关于旅游的活动方案
2014/08/15 职场文书
励志演讲稿800字
2014/08/21 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
人与自然的观后感
2015/06/18 职场文书
导游词之广州陈家祠
2019/10/21 职场文书
导游词之山东八大关
2019/12/18 职场文书