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 相关文章推荐
基于JQuery的密码强度验证代码
Mar 01 Javascript
YUI Compressor压缩JavaScript原理及微优化
Jan 07 Javascript
Javascript表格翻页效果的具体实现
Oct 05 Javascript
ParseInt函数参数设置介绍
Jan 02 Javascript
jquery 为a标签绑定click事件示例代码
Jun 23 Javascript
node.js中的querystring.parse方法使用说明
Dec 10 Javascript
Javascript添加监听与删除监听用法详解
Dec 19 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
Jan 07 Javascript
使用JS代码实现俄罗斯方块游戏
Aug 03 Javascript
JQuery复选框全选效果如何实现
May 08 jQuery
vue通过接口直接下载java生成好的Excel表格案例
Oct 26 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的优点与缺点
2013/04/11 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
Javascript实现找不同色块的游戏
2017/07/17 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
Python描述器descriptor详解
2015/02/03 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
Python中http请求方法库汇总
2016/01/06 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
python 实现多维数组(array)排序
2020/02/28 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
数控技术与应用毕业生自荐信
2013/09/24 职场文书
医院护士的求职信
2014/01/03 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
中学生评语大全
2014/04/18 职场文书
2014年材料员工作总结
2014/11/19 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python