javascript中怎么使用class静态方法
这篇文章主要介绍"javascript中怎么使用class静态方法",在日常操作中,相信很多人在javascript中怎么使用class静态方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"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;}
到此,关于"javascript中怎么使用class静态方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!