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 相关文章推荐
JavaScript使用prototype定义对象类型
Feb 07 Javascript
javascript 精粹笔记
May 09 Javascript
JSONP 跨域共享信息
Aug 16 Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
网站基于flash实现的Banner图切换效果代码
Oct 14 Javascript
jQuery对JSON数据进行排序输出的方法
Jun 24 Javascript
AngularJS入门教程之AngularJS指令
Apr 18 Javascript
jQuery如何解决IE输入框不能输入的问题
Oct 08 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
Jan 08 Javascript
详解js几个绕不开的事件兼容写法
Aug 30 Javascript
jstree中的checkbox默认选中和隐藏示例代码
Dec 29 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
百度地图API使用方法详解
2015/08/25 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
js实现分页功能
2017/05/24 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
详解Python中的__new__()方法的使用
2015/04/09 Python
django批量导入xml数据
2016/10/16 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
python中元组的用法整理
2020/06/15 Python
opencv 阈值分割的具体使用
2020/07/08 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
Django实现简单的分页功能
2021/02/22 Python
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
2014年后勤管理工作总结
2014/12/01 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
单位考核鉴定意见
2015/06/05 职场文书
上学路上观后感
2015/06/16 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
windows安装python超详细图文教程
2021/05/21 Python
MySQL 数据类型选择原则
2021/05/27 MySQL
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python