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 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
uploadify在Firefox下丢失session问题的解决方法
Aug 07 Javascript
JavaScript的内存释放问题详解
Jan 21 Javascript
JS实现环形进度条(从0到100%)效果
Jul 05 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
Dec 05 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
vue实现拖拽效果
Dec 23 Javascript
原生js实现简单轮播图
Oct 26 Javascript
echarts浮动显示单位的实现方法示例
Dec 04 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 Javascript
用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
PHP 日,周,月点击排行统计
2012/01/11 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
python中尾递归用法实例详解
2015/04/28 Python
深入理解python对json的操作总结
2017/01/05 Python
python实现三次样条插值
2018/12/17 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
执行总经理岗位职责
2014/02/03 职场文书
应聘英语教师求职信
2014/04/24 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
药房管理制度范本
2015/08/06 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL