Class 的静态方法

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

  1. class Foo {
  2. static classMethod() {
  3. return 'hello';
  4. }
  5. }
  6. Foo.classMethod() // 'hello'
  7. var foo = new Foo();
  8. foo.classMethod()
  9. // TypeError: foo.classMethod is not a function

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

注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。

  1. class Foo {
  2. static bar () {
  3. this.baz();
  4. }
  5. static baz () {
  6. console.log('hello');
  7. }
  8. baz () {
  9. console.log('world');
  10. }
  11. }
  12. Foo.bar() // hello

上面代码中,静态方法bar调用了this.baz,这里的this指的是Foo类,而不是Foo的实例,等同于调用Foo.baz。另外,从这个例子还可以看出,静态方法可以与非静态方法重名。

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

  1. class Foo {
  2. static classMethod() {
  3. return 'hello';
  4. }
  5. }
  6. class Bar extends Foo {
  7. }
  8. Bar.classMethod() // 'hello'

上面代码中,父类Foo有一个静态方法,子类Bar可以调用这个方法。

静态方法也是可以从super对象上调用的。

  1. class Foo {
  2. static classMethod() {
  3. return 'hello';
  4. }
  5. }
  6. class Bar extends Foo {
  7. static classMethod() {
  8. return super.classMethod() + ', too';
  9. }
  10. }
  11. Bar.classMethod() // "hello, too"

es6 Class 的静态方法相关推荐

  1. es6 --- Reflect的静态方法

    Reflect.get(target, name, receiver): 查找并返回 target对象的 name属性,若没有,返回undefined var myObject = {foo: 1,b ...

  2. 学习笔记 JavaScript ES6 Promise的静态方法

    学习内容: Promise.resolve() Promise.reject() Promise.all() Promise.race() Promise.resolve(),表示成功的状态 Prom ...

  3. ES5和ES6中对于继承的实现方法

    在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...

  4. ES6新增数据类型符号(2):共享符号与知名符号

    目录 1.共享符号 2.知名符号 1.共享符号 上节课讲到每次调用得到的符号都是不相同的,但是存在需要同一个符号的需求,因此ES6提供了静态方法for,可以根据某个符号名称(符号描述)得到同一个符号, ...

  5. 【ES6 教程】第四章 ES6类04—如何定义与类关联的方法

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在今天的文章中,我们将一起来学习 JavaScript 静态方法以及如何有效地使用它们. JavaSc ...

  6. JavaScript = TypeScript 类入门

    尝试重写 在此之前,通过<JavaScript => TypeScript 入门>已经掌握了类型声明的写法.原以为凭着那一条无往不利的规则,就可以开开心心的重写 JS 项目了.当我跃 ...

  7. es if语法 script_熬夜7天,我总结了JavaScript与ES的25个重要知识点!

    作者:哪吒 出自:程序员小灰 前言 说起JavaScript,大家都知道是一门脚本语言.那么ES是什么鬼呢?ES全称ECMAScript ,是JavaScript语言的国际标准. 最近,我总结了25条 ...

  8. @hot热加载修饰器导致static静态属性丢失(已解决)

    react开发的时候,引入热加载,用了修饰器的引入方式,发现了一个很有意思的问题,网上并没有相关文章,所以抛出来探讨下. 一段很简单的测试代码.但是经过babel编码后,变得很有意思.假设编码成es2 ...

  9. JS-深入理解继承(非class方式与class继承)

    从一个面试题目入手: 如何实现一个类? 1. 类的三种属性: 公有属性:使用__proto__访问的属性 私有属性: 实例自带的属性 静态方法 (es7中有了静态属性) 2. 利用构造函数的方式模拟类 ...

最新文章

  1. usaco Controlling Companies
  2. java 复制对象有哪些方式
  3. 《排序算法系列一、简单选择排序》
  4. 使用搜索引擎的10个搜索技巧
  5. 二、WPF datagrid 特定行变色
  6. phpstrom查看代码总行数_歪特内推浦发银行总行信息科技部
  7. 在js中如何判断一个对象是否为空
  8. Java反序列化json内存溢出_反序列化JSON时出现线程错误
  9. 个人贷款5级分类,来看看你是哪一级
  10. 《Reids 设计与实现》第十四章 集群(上)
  11. sentinel接入网关应用_阿里sentinel配合gateway 网关限流
  12. oracle 添加外键,报“未找到父项关键字”
  13. kvm : virsh create *** 报错处理
  14. SAS Base备考经历分享
  15. 开源聚力,共创未来 | 麒麟信安祝贺openKylin首个体验版正式发布!
  16. buck 与ldo效率
  17. JAVASCRIPT 网页特效经典300例 pdf
  18. 最常被遗忘的 Web 性能优化:浏览器缓存
  19. 微信客户管理方式及如何微信客户管理
  20. u盘连接计算机无法识别usb设备,u盘插电脑显示:跟这台计算机连接的前一个USB设备工作不正常,windows无法识别它。...

热门文章

  1. SQLite事务与自增深度分析
  2. linux ubuntu 12.04 下默认是安装了openjdk的
  3. 条款05:了解C++默默编写并调用哪些函数
  4. 睡觉时,禁带6种东西,最后一点最严重,可能致命
  5. 考验程序员的一个FLASH游戏(Light-Bot)
  6. html是一种描述的沙子语言,小学低年级语文阅读训练
  7. 0.3:Before We Start
  8. TestNG配合ant脚本进行单元测试
  9. MarkdownPad基于语法示例
  10. 【hihocoder 1039 字符串消除】模拟