关于Class: ES6 JavaScript的class的静态方法、属性和实例属性。
1、什么叫做静态方法?
1.1、类相当于实例的原型, 所有在类中定义的方法, 都会被实例继承。如果在一个方法前,加上Static关键字,就表示该方法不会被继承,而是直接通过类来调用,这被称为 “静态方法”。
1.2、我们可以从代码上进行更深的理解。
下面的代码中,Sea类的classMethod方法前有static关键字,表明该方法是一个静态方法,可以直接在Sea类上调用(Sea.classMethod()),而不是在Sea类的实例上调用静态方法,会抛出一个错误,表示不存在该方法。
父类的静态方法可以被子类继承。
class Sea {
static classMethod(){
return 'hello'
}
}
Sea.classMethod() //'hello'
var foo =new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function
下面代码中。父类Sea有一个静态方法,子类Ocean可以调用这个方法。
静态方法也是可以从super对象上调用。
class Sea{
static classMethod(){
return 'hello'
}
}
class Ocean extends Sea{}
Ocean.clsaaMethod(); //'hello'
1.3、下面就是整个静态方法的使用(完整的可以直接用)
class Sea{
static classMethod(){
return 'hello'
}
}
class Ocean extends Sea{
static classMethod(){
return super.clsassMethod()+',too'
}
}
Ocean.classMethod();
2、什么叫静态属性?
2.1、静态属性指的是Class本身的属性,即Class.propname,而不是定义在实例对象(this)上的属性。
2.2、我们可以从代码上进行更深的理解。
下面的写法为Sea定义了一个静态prop,目前,只有这种写法可行,因为ES6明确规定,Class内部只有静态方法,没有静态属性。
class Foo {}
Foo.prop = ;
Foo.prop //
2.3、ES7 有一个静态属性的提案, 目前 Babel 转码器支持。这个提案对实例属性和静态属性, 都规定了新的写法。
2.3.1、 类的实例属性
类的实例属性可以用等式, 写入类的定义之中。
// 以下两种写法都无效
class Sea {
// 写法一
prop:
// 写法二
static prop:
}
Sea.prop // undefined
2.4、下面代码中,myProp就是MyClass的实例属性。在MyClass的实例上,可以读取这个属性。以前,我们定义实例属性,只能写在类的从structor方法里面。
calss MyClass{
myProp=;
constructor(){
console.log(this.myProp);
}
}
2.5、下面代码中,构造方法constructor里面,定义了this.state属性。有了新的写法以后,可以不在constructor方法里面定义。
class ReactCounter extends React.Component {
constructor(props) {
super(props);
this.state = {
count:
};
}
}
这种写法比以前更清晰。
为了可读性的目的, 对于那些在constructor里面已经定义的实例属性, 新写法允许直接列出。
class ReactCounter extends React.Component {
state = {
count:
};
}
2.6、下面即使整个静态属性的使用(完整的可以直接用)
class ReactCounter extends React.Component {
constructor(props) {
super(props);
this.state = {
count:
};
}
state;
}
3、类的静态属性
3.1、类的静态属性只要在上面的实例属性写在前面, 加上static关键字就可以了。
class MyClass {
static myStaticProp = ;
constructor() {
console.log(MyClass.myProp); //
}
}
同样的,这个写法大大方便了静态属性的表达。
// 老写法
class Foo {}
Foo.prop = ;
// 新写法
class Foo {
static prop = ;
}
上面代码中, 老写法的静态属性定义在类的外部。 整个类生成以后, 再生成静态属性。 这样让人很容易忽略这个静态属性, 也不符合相关代码应该放在一起的代码组织原则。 另外, 新写法是显式声明( declarative), 而不是赋值处理, 语义更好。
关于Class: ES6 JavaScript的class的静态方法、属性和实例属性。的更多相关文章
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
From: http://www.cnblogs.com/pengsixiong/p/4823473.html 属性分为实例属性与类属性 方法分为普通方法,类方法,静态方法 一:属性: 尽量把需要用户 ...
- Python中的类属性、实例属性与类方法、静态方法
1.什么是类对象,实例对象 类对象:类名 实例对象:类创建的对象 2.类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++.Java中类的静态成员变量有点 ...
- python的类属性、实例属性、类方法、静态方法
类属性 就像如下代码: class Person: name = "张三" # 共有类属性 __age = 18 # 私有类属性 在类中直接定义的属性就是类属性,它被所有的实例对象 ...
- Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法
一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...
- python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法
类对象.类属性与实例对象.实例属性的区别 在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性.类属性在内存中只有一份,在__init__外部定义. 通过类创建的对象称为实 ...
- es6 javascript的class的静态方法、属性和实例属性
http://blog.csdn.net/qq_30100043/article/details/53542966
- Python中的静态属性、实例属性、静态方法、实例方法之间的区别
- Class的使用,构造方法,实例属性和实例方法,静态属性和静态方法,this和super关键字,类的继承
s6新增了一种定义对象实例的方法,Class(类)这个概念,作为对象的模板.class可以看作只是一个语法糖,通过class关键字,可以定义类.让对象原型的写法更加清晰.更像面向对象编程的语法. 一. ...
- python类属性和类方法(类的结构、实例属性、静态方法)
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
随机推荐
- 在 Windows 上的 Visual Studio 中使用 Python
地址:https://docs.microsoft.com/zh-cn/visualstudio/python/tutorial-working-with-python-in-visual-studi ...
- 2019 学霸君java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.学霸君等公司offer,岗位是Java后端开发,因为发展原因最终选择去了学霸君,入职一年时间了,也成为了面试官 ...
- 关于spring中请求返回值的json序列化/反序列化问题
https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑
- group by 两个字段
group by 的简单说明: group by 一般和聚合函数一起使用才有意义,比如 count sum avg等 使用group by的两个要素: (1) 出现在select后面的字段 要么 ...
- 使用 Spring 配置动态数据源实现读写分离
关键词:DataSource .AbstractRoutingDataSource.AOP 首先是配置数据源 <!--读数据源配置--><bean id="readData ...
- fastadmin CMS等系列插件安装不成功的问题
由于fastadmin开发者 没有做到权限优化问题,导致用户在linux服务器上lnmp环境下安装的fastadmin后台安装插件一直产生权限不足,安装不成功的问题, 再次给大家一个具体解决办法 对 ...
- Robot Framework RIDE简单使用
Testproject Testsuite Testcase 1.创建测试项目 打开RIDE,点击File--New Project,选择项目路径,填入项目名称 2.右键点击新建的测试项目,选择New ...
- Java多线程上下文切换
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10843676.html 一:什么是上下文切换 CPU处理任务时不是一直只处理一个,而是通过给每个线程分配CP ...
- 关于交叉熵损失函数Cross Entropy Loss
1.说在前面 最近在学习object detection的论文,又遇到交叉熵.高斯混合模型等之类的知识,发现自己没有搞明白这些概念,也从来没有认真总结归纳过,所以觉得自己应该沉下心,对以前的知识做一个 ...
- Python并发编程内容回顾
Python并发编程内容回顾 并发编程小结 目录 • 一.到底什么是线程?什么是进程? • 二.Python多线程情况下: • 三.Python多进程的情况下: • 四.为什么有这把GIL锁? • 五 ...