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的静态方法、属性和实例属性。的更多相关文章

  1. Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法

    From: http://www.cnblogs.com/pengsixiong/p/4823473.html 属性分为实例属性与类属性 方法分为普通方法,类方法,静态方法 一:属性: 尽量把需要用户 ...

  2. Python中的类属性、实例属性与类方法、静态方法

    1.什么是类对象,实例对象 类对象:类名 实例对象:类创建的对象 2.类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++.Java中类的静态成员变量有点 ...

  3. python的类属性、实例属性、类方法、静态方法

    类属性 就像如下代码: class Person: name = "张三" # 共有类属性 __age = 18 # 私有类属性 在类中直接定义的属性就是类属性,它被所有的实例对象 ...

  4. Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

    一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...

  5. python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法

    类对象.类属性与实例对象.实例属性的区别 在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性.类属性在内存中只有一份,在__init__外部定义. 通过类创建的对象称为实 ...

  6. es6 javascript的class的静态方法、属性和实例属性

    http://blog.csdn.net/qq_30100043/article/details/53542966

  7. Python中的静态属性、实例属性、静态方法、实例方法之间的区别

  8. Class的使用,构造方法,实例属性和实例方法,静态属性和静态方法,this和super关键字,类的继承

    s6新增了一种定义对象实例的方法,Class(类)这个概念,作为对象的模板.class可以看作只是一个语法糖,通过class关键字,可以定义类.让对象原型的写法更加清晰.更像面向对象编程的语法. 一. ...

  9. python类属性和类方法(类的结构、实例属性、静态方法)

    类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...

随机推荐

  1. 在 Windows 上的 Visual Studio 中使用 Python

    地址:https://docs.microsoft.com/zh-cn/visualstudio/python/tutorial-working-with-python-in-visual-studi ...

  2. 2019 学霸君java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.学霸君等公司offer,岗位是Java后端开发,因为发展原因最终选择去了学霸君,入职一年时间了,也成为了面试官 ...

  3. 关于spring中请求返回值的json序列化/反序列化问题

    https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑

  4. group by 两个字段

    group by 的简单说明:  group by 一般和聚合函数一起使用才有意义,比如 count sum avg等 使用group by的两个要素:   (1) 出现在select后面的字段 要么 ...

  5. 使用 Spring 配置动态数据源实现读写分离

    关键词:DataSource .AbstractRoutingDataSource.AOP 首先是配置数据源 <!--读数据源配置--><bean id="readData ...

  6. fastadmin CMS等系列插件安装不成功的问题

    由于fastadmin开发者  没有做到权限优化问题,导致用户在linux服务器上lnmp环境下安装的fastadmin后台安装插件一直产生权限不足,安装不成功的问题, 再次给大家一个具体解决办法 对 ...

  7. Robot Framework RIDE简单使用

    Testproject Testsuite Testcase 1.创建测试项目 打开RIDE,点击File--New Project,选择项目路径,填入项目名称 2.右键点击新建的测试项目,选择New ...

  8. Java多线程上下文切换

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10843676.html 一:什么是上下文切换 CPU处理任务时不是一直只处理一个,而是通过给每个线程分配CP ...

  9. 关于交叉熵损失函数Cross Entropy Loss

    1.说在前面 最近在学习object detection的论文,又遇到交叉熵.高斯混合模型等之类的知识,发现自己没有搞明白这些概念,也从来没有认真总结归纳过,所以觉得自己应该沉下心,对以前的知识做一个 ...

  10. Python并发编程内容回顾

    Python并发编程内容回顾 并发编程小结 目录 • 一.到底什么是线程?什么是进程? • 二.Python多线程情况下: • 三.Python多进程的情况下: • 四.为什么有这把GIL锁? • 五 ...