今天来教大家在js中class的使用方法,类是相当于实例的原型,所有在类中定义的方法都是会被实例继承的,如果在一个方法前,加上上static关键字, 就表示该方法不会被实例继承,下面给大家举例说明一下。
[javascript]view plaincopy
classfoo{
staticclassmethod(){
return'hello';
}
}
foo.classmethod()//'hello'
varfoo=newfoo();
foo.classmethod()
//typeerror:foo.classmethodisnotafunction
上面代码中, foo类的classmethod方法前有static关键字, 表明该方法是一个静态方法, 可以直接在foo类上调用( foo.classmethod()), 而不是在foo类的实例上调用。 如果在实例上调用静态方法, 会抛出一个错误, 表示不存在该方法。
父类的静态方法, 可以被子类继承。
[javascript]view plaincopy
classfoo{
staticclassmethod(){
return'hello';
}
}
classbarextendsfoo{}
bar.classmethod();//'hello' 上面代码中, 父类foo有一个静态方法, 子类bar可以调用这个方法。
静态方法也是可以从super对象上调用的。
[javascript]view plaincopy
classfoo{
staticclassmethod(){
return'hello';
}
}
classbarextendsfoo{
staticclassmethod(){
returnsuper.classmethod()+',too';
}
}
bar.classmethod();静态属性[javascript]view plaincopy
classfoo{}
foo.prop=1;
foo.prop//1 上面的写法为foo类定义了一个静态属性prop。
目前, 只有这种写法可行, 因为 es6 明确规定, class 内部只有静态方法, 没有静态属性。
[javascript]view plaincopy
//以下两种写法都无效
classfoo{
//写法一
prop:2
//写法二
staticprop:2
}
foo.prop//undefined es7 有一个静态属性的提案, 目前 babel 转码器支持。
这个提案对实例属性和静态属性, 都规定了新的写法。
( 1) 类的实例属性
类的实例属性可以用等式, 写入类的定义之中。
[javascript]view plaincopy
classmyclass{
myprop=42;
constructor(){
console.log(this.myprop);//42
}
}
上面代码中, myprop就是myclass的实例属性。 在myclass的实例上, 可以读取这个属性。
以前, 我们定义实例属性, 只能写在类的constructor方法里面。
[javascript]view plaincopy
classreactcounterextendsreact.component{
constructor(props){
super(props);
this.state={
count:0
};
}
} 上面代码中, 构造方法constructor里面, 定义了this.state属性。
有了新的写法以后, 可以不在constructor方法里面定义。
[javascript]view plaincopy
classreactcounterextendsreact.component{
state={
count:0
};
}
这种写法比以前更清晰。
为了可读性的目的, 对于那些在constructor里面已经定义的实例属性, 新写法允许直接列出。
[javascript]view plaincopy
classreactcounterextendsreact.component{
constructor(props){
super(props);
this.state={
count:0
};
}
state;
}
(2) 类的静态属性
类的静态属性只要在上面的实例属性写法前面, 加上static关键字就可以了。
[javascript]view plaincopy
//老写法
classfoo{}
foo.prop=1;
//新写法
classfoo{
staticprop=1;
}
上面代码中, 老写法的静态属性定义在类的外部。 整个类生成以后, 再生成静态属性。 这样让人很容易忽略这个静态属性, 也不符合相关代码应该放在一起的代码组织原则。 另外, 新写法是显式声明( declarative), 而不是赋值处理, 语义更好。
相信看了这些案例你已经掌握了方法,更多精彩请关注其它相关文章!
相关阅读:
js引擎运行时是什么样的
ajax使用中的异步同步请求怎么实现
js开发中jssplice()方法如何使用
以上就是在js中class属性需要如何使用的详细内容。