ES6 javascript中class静态方法、属性与实例属性用法示例


Posted in Javascript onOctober 30, 2017

本文实例讲述了ES6 javascript中class静态方法、属性与实例属性用法。分享给大家供大家参考,具体如下:

类相当于实例的原型, 所有在类中定义的方法, 都会被实例继承。 如果在一个方法前, 加上static关键字, 就表示该方法不会被实例继承, 而是直接通过类来调用, 这就称为“ 静态方法”。

class Foo {
  static classMethod() {
    return 'hello';
  }
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function

上面代码中, Foo类的classMethod方法前有static关键字, 表明该方法是一个静态方法, 可以直接在Foo类上调用( Foo.classMethod()), 而不是在Foo类的实例上调用。 如果在实例上调用静态方法, 会抛出一个错误, 表示不存在该方法。

父类的静态方法, 可以被子类继承。

class Foo {
  static classMethod() {
    return 'hello';
  }
}
class Bar extends Foo {}
Bar.classMethod(); // 'hello'

上面代码中, 父类Foo有一个静态方法, 子类Bar可以调用这个方法。
静态方法也是可以从super对象上调用的。

class Foo {
  static classMethod() {
    return 'hello';
  }
}
class Bar extends Foo {
  static classMethod() {
    return super.classMethod() + ', too';
  }
}
Bar.classMethod();

静态属性

静态属性指的是 Class 本身的属性, 即Class.propname, 而不是定义在实例对象( this) 上的属性。

class Foo {}
Foo.prop = 1;
Foo.prop // 1

上面的写法为Foo类定义了一个静态属性prop。

目前, 只有这种写法可行, 因为 ES6 明确规定, Class 内部只有静态方法, 没有静态属性。

// 以下两种写法都无效
class Foo {
  // 写法一
  prop: 2
    // 写法二
  static prop: 2
}
Foo.prop // undefined

ES7 有一个静态属性的提案, 目前 Babel 转码器支持。

这个提案对实例属性和静态属性, 都规定了新的写法。

(1) 类的实例属性

类的实例属性可以用等式, 写入类的定义之中。

class MyClass {
  myProp = 42;
  constructor() {
    console.log(this.myProp); // 42
  }
}

上面代码中, myProp就是MyClass的实例属性。 在MyClass的实例上, 可以读取这个属性。

以前, 我们定义实例属性, 只能写在类的constructor方法里面。

class ReactCounter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }
}

上面代码中, 构造方法constructor里面, 定义了this.state属性。
有了新的写法以后, 可以不在constructor方法里面定义。

class ReactCounter extends React.Component {
  state = {
    count: 0
  };
}

这种写法比以前更清晰。

为了可读性的目的, 对于那些在constructor里面已经定义的实例属性, 新写法允许直接列出。

class ReactCounter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }
  state;
}

(2) 类的静态属性

类的静态属性只要在上面的实例属性写法前面, 加上static关键字就可以了。

class MyClass {
static myStaticProp = 42;
constructor() {
console.log(MyClass.myProp); // 42
}
}

同样的, 这个新写法大大方便了静态属性的表达。

// 老写法
class Foo {}
Foo.prop = 1;
// 新写法
class Foo {
  static prop = 1;
}

上面代码中, 老写法的静态属性定义在类的外部。 整个类生成以后, 再生成静态属性。 这样让人很容易忽略这个静态属性, 也不符合相关代码应该放在一起的代码组织原则。 另外, 新写法是显式声明( declarative), 而不是赋值处理, 语义更好。

更多相关内容可查看本站专题:《ECMAScript6(ES6)入门教程》、《JavaScript数组操作技巧总结》、《JavaScript字符与字符串操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家基于ECMAScript的程序设计有所帮助。

Javascript 相关文章推荐
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
Feb 18 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
js时间日期格式化封装函数
Dec 02 Javascript
jquery中JSON的解析方式
Mar 16 Javascript
js实现三张图(文)片一起切换的banner焦点图
Aug 25 Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 Javascript
原生JS实现图片轮播与淡入效果的简单实例
Aug 21 Javascript
详解webpack分包及异步加载套路
Jun 29 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
Aug 31 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
Oct 31 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
Dec 25 jQuery
用React实现一个完整的TodoList的示例代码
Oct 30 #Javascript
JavaScript实现精美个性导航栏筋斗云效果
Oct 29 #Javascript
vue中的scope使用详解
Oct 29 #Javascript
Vue.js划分组件的方法
Oct 29 #Javascript
vue.js  父向子组件传参的实例代码
Oct 29 #Javascript
vue.js todolist实现代码
Oct 29 #Javascript
javascript按钮禁用和启用的效果实例代码
Oct 29 #Javascript
You might like
用文本文件制作留言板提示(下)
2006/10/09 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
php检测文本的编码
2015/07/26 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
原生js和jquery分别实现横向导航菜单效果
2016/05/13 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
linux环境下Django的安装配置详解
2019/07/22 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
六一儿童节活动策划方案
2014/01/27 职场文书
气象学专业个人求职信
2014/04/22 职场文书
单位单身证明样本
2014/10/11 职场文书
教师党员个人自我评价
2015/03/04 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript