es6中的class有静态属性吗


这篇文章主要介绍“es6中的class有静态属性吗”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es6中的class有静态属性吗”文章能帮助大家解决问题。 es6中的class没有静态属性。静态属性是class本身的属性,即直接定义在类内部的属性( Class.propname ),不需要实例化;但ES6中规定,Class内部只有静态方法,没有静态属性。在ES6中,class (类)作为对象的模板被引入,可以通过 class 关键字定义类。class 的本质是 function。它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。ES6 Class 静态方法、属性和实例属性类相当于实例的原型, 所有在类中定义的方法, 都会被实例继承。 如果在一个方法前, 加上static关键字, 就表示该方法不会被实例继承, 而是直接通过类来调用, 这就称为“ 静态方法”。

classFoo{
	staticclassMethod(){
		return'hello';
	}
}
Foo.classMethod()//'hello'
varfoo=newFoo();
foo.classMethod()
	//TypeError:foo.classMethodisnotafunction

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

classFoo{
	staticclassMethod(){
		return'hello';
	}
}
classBarextendsFoo{}
Bar.classMethod();//'hello'

上面代码中, 父类Foo有一个静态方法, 子类Bar可以调用这个方法。静态方法也是可以从super对象上调用的。

classFoo{
	staticclassMethod(){
		return'hello';
	}
}
classBarextendsFoo{
	staticclassMethod(){
		returnsuper.classMethod()+',too';
	}
}
Bar.classMethod();

静态属性静态属性指的是 Class 本身的属性, 即Class.propname, 而不是定义在实例对象( this) 上的属性。

classFoo{}
Foo.prop=1;
Foo.prop//1

上面的写法为Foo类定义了一个静态属性prop。目前, 只有这种写法可行, 因为 ES6 明确规定, Class 内部只有静态方法, 没有静态属性。

//以下两种写法都无效
classFoo{
	//写法一
	prop:2
		//写法二
	staticprop:2
}
Foo.prop//undefined

ES7 有一个静态属性的提案, 目前 Babel 转码器支持。这个提案对实例属性和静态属性, 都规定了新的写法。( 1) 类的实例属性类的实例属性可以用等式, 写入类的定义之中。

classMyClass{
	myProp=42;
	constructor(){
		console.log(this.myProp);//42
	}
}

上面代码中, myProp就是MyClass的实例属性。 在MyClass的实例上, 可以读取这个属性。
以前, 我们定义实例属性, 只能写在类的constructor方法里面。

classReactCounterextendsReact.Component{
	constructor(props){
		super(props);
		this.state={
			count:0
		};
	}
}

上面代码中, 构造方法constructor里面, 定义了this.state属性。
有了新的写法以后, 可以不在constructor方法里面定义。

classReactCounterextendsReact.Component{
	state={
		count:0
	};
}

这种写法比以前更清晰。为了可读性的目的, 对于那些在constructor里面已经定义的实例属性, 新写免费云主机域名法允许直接列出。

classReactCounterextendsReact.Component{
	constructor(props){
		super(props);
		this.state={
			count:0
		};
	}
	state;
}

(2) 类的静态属性类的静态属性只要在上面的实例属性写法前面, 加上static关键字就可以了。

classMyClass{
staticmyStaticProp=42;
constructor(){
console.log(MyClass.myProp);//42
}
}

同样的, 这个新写法大大方便了静态属性的表达。

//老写法
classFoo{}
Foo.prop=1;
//新写法
classFoo{
	staticprop=1;
}

上面代码中, 老写法的静态属性定义在类的外部。 整个类生成以后, 再生成静态属性。 这样让人很容易忽略这个静态属性, 也不符合相关代码应该放在一起的代码组织原则。 另外, 新写法是显式声明( declarative), 而不是赋值处理, 语义更好。关于“es6中的class有静态属性吗”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: python区块链如何创建多个交易

这篇“python区块链如何创建多个交易”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python区块链如何创建多个交易”文章吧。各个客户进行的…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/10 20:13
下一篇 05/10 20:15

相关推荐