ES6中类的静态方法static 的使用?

ES6中新增了static关键字,static方法不能被实例继承,只能通过类来调用

class Super{
    static test(){
        console.log('Super test');
    }
}

let sub = new Super;
sub.test() // error
Super.test()

但是子类可以通过extends来继承父类中的方法

class Super{
    static test(){
        console.log('Super test');
    }
}

// let sub = new Super;
// sub.test() // error
// Super.test()

class sub extends Super{

}
sub.test()

我想知道ES6中为什么会引入static关键字,他们有什么应用场景?原型,静态,实例上的方法会有什么不同?希望大佬解答一下哇,感谢!!!

阅读 2k
2 个回答
亲, 我们这边建议把这本 ES6入门教程 翻烂。

Class的基本语法 章节的 8.静态方法 以及 9.静态属性 部分 阮一峰大佬说的算比较详细了。

总的来说就是按照传统来说定义静态方法主要是规避两个模块调用同名函数的情况。

同时只需要通过 类名.静态方法名 就可以访问,不需要创建实例对象去使用,带来便利的同时还能够提升性能(同一块内存)。

实例可以看做通过new关键字创建了一个新的对象const sub = new Super(),让sub这个对象的__propo__等于函数的prototype(先简单理解,而且Class本身也是一个function), 定义在Super内部的方法可以理解定义在function的prototype上面。而通过static,就是Super自己一个属性
e.g.

function Super() {}; 
Super.test = function(){};  
Super.prototype.xxx = function(){};
class Super{
      xxx(){}
    static test(){
       console.log('Super test');
   }
}

大致可以这么理解 具体关于原型,以及原型继承方式这些可以自己查看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题