关于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 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
随机推荐
- .net core 加载项目提示项目文件不完整,dotnet提示不是内部或外部命令
记录一下 在系统环境变量中PATH添加如下: C:\Windows;C:\Windows\System32\System32\Wbem;C:\Windows\System32;
- Centos中编辑php扩展库
今天需要在Centos中编译Exif库以便获取图片的exif信息,可在Linux中从来没有编译过扩展库呀,只好查资料了.发现是用phpize这个东东来编译扩展. 首先执行了下 php -i | gre ...
- Spring扩展点之BeanFactoryPostProcessor
前言 BeanFactoryPostProcessor接口是Spring中一个非常重要的接口,它的接口定义如下 public interface BeanFactoryPostProcessor { ...
- Java中基本数据类型、不能用浮点数表示金额
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10831763.html 一:8种基本数据类型 8种基本数据类型(4整,2浮,1符,1布): 整型:byte( ...
- Elasticsearch高版本安装head插件
安装Elasticsearch 1.安装Elasticsearch-6.5.4.tar.gz [merce@info5 ~]$ cd /appmerce/zrapp/ [merce@info5 zra ...
- 一文搞定PGA_LGA_BGA
概述 什么是LGA.PGA.BGA类型的封装?众所周知,CPU封装的类型主要为三种:LGA,PGA,BGA,其中LGA封装是最常见的,intel处理器都是采用这种类型的封装,而PGA封装则是AMD常用 ...
- nginx日志设置
环境:nginx1.16.1 (1)日志类型:access_log(访问日志) error_log(错误日志)rewrite_log 访问日志:通过访问日志我们可以得到用户的IP地址.浏览器的信息,请 ...
- Xcode 10 无开发者账号通过无线网络真机调试
Xcode是苹果公司向开发人员提供的集成开发环境,用于开发macOS.iOS.WatchOS和tvOS的应用程序.WWDC18全球开发者大会上,苹果发布了macOS Mojave beta测试版系统, ...
- 第02节-BLE协议各层的形象化理解
本篇博客根据韦大仙视频,整理所得. 先上框图: ATT层 从ATT开始看,在上篇博客讲的医院结构里面有个检验室,检验室可以得到各项结果,但是它并不知道这些结果代表什么含义.类比的在BLE协议栈里面,A ...
- Android Studio + uiautomator 配置运行
1.在build.gradle中添加依赖: androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v1 ...