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. 《Netty 权威指南(第2 版)》目录

    图书简介:<Netty 权威指南(第2 版)>是异步非阻塞通信领域的经典之作,基于最新版本的Netty 5.0 编写,是国内很难得一见的深入介绍Netty 原理和架构的书籍,也是作者多年实 ...

  2. Filco圣手二代双模蓝牙机械键盘的连接方法

    常规方法 确认键盘的电源接通. 同时按下「Ctrl」+「Alt」+「Fn」执行装置切换模式.配对LED灯(蓝)和低电量显示LED灯(红)约同时亮10秒左右. 想移除已登录的装置时,请从「蓝牙装置登录/ ...

  3. python 排序冒泡排序与双向冒泡排序

    冒泡排序: 冒泡排序就是每次找出最大(最小)元素,放在集合最前或最后,这是最简单的排序算法 def bubble_sort(collection): #升序排列 length=len(collecti ...

  4. 函数使用十一:BAPI_BANK_CREATE

    FI01创建银行主数据: BAPI:BAPI_BANK_CREATE *&----------------------------------------------------------- ...

  5. linux系统最大TCP连接数限制

    2017-12-28 17:48:21 chenlin465373800 阅读数 16189    不太对 本博客为转载,原文请参见<a href="http://blog.51cto ...

  6. python实现生产者消费者模型

    生产者消费之模型就是,比如一个包子铺,中的顾客吃包子,和厨师做包子,不可能是将包子一块做出来,在给顾客吃,但是单线程只能这麽做,所以用多线程来执行,厨师一边做包子,顾客一边吃包子,当顾客少时,厨师做的 ...

  7. Idea如何快速生成Junit测试类

    测试是保证代码必不可少的环节,自己构建测试方法太慢,并且命名也不规范,idea中提供了,一键构建测试结构的功能... 2.步骤 1.在需要做测试的类的当前窗口,直接按快捷键:按ctrl+shift+t ...

  8. Django常用自段和参数

    本文目录 1 ORM字段 2 ORM字段参数 3 关系字段 4 多对多关联关系的三种方式 5 元信息 6 自定义字段(了解) 回到目录 1 ORM字段 AutoField int自增列,必须填入参数 ...

  9. Google Chrome 解决 “您的连接不是私密连接” 和被毒霸劫持

    一.解决 “您的连接不是私密连接” 前一段时间,Chrome 突然显示出了“您的连接不是私密连接”,这下可难受了,大部分的网站打开都有问题. 找了各种方法,各种设置都是不行. 一.暴力.费力的方法直接 ...

  10. 201671030103 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 任课教师首页链接 这个作业的要求在哪里 作业链接地址 课程学习目标 (1)掌握软件项目评审会流程 (2)反思总结课程学习内容 任务一: 团队项目Github仓库中提交 ...