首页 > 其他分享 >ES6-class类

ES6-class类

时间:2023-05-12 18:23:04浏览次数:37  
标签:ES6 静态方法 实例 constructor hobby class 属性

类的声明方式

1.声明式
class A {}

2.匿名表达式
const A = class {}

3.命名表达式,A可以外部访问,A2只能在内部访问
const A = class A2 {}

4.立即执行
const A = new class {
  constructor(aName) {
    this.aName = aName
  }

  sayName() { return console.log(this.aName)}
}('A')
A.sayName() // A 

类必须使用new调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。

constructor

实例属性

class A {
  // 与 constructor 中一样
  // constructor 如果没有显示定义则会隐式默认添加一个空的 constructor
  hobby = ['唱', '跳', '篮球', 'rap']

  constructor() {
    // 定义类的实例属性
    this.aName = 'A'
  }
}

继承 extends

class B extends A {
  constructor() {
    super(
      // ES6 要求,子类的构造函数必须执行一次 super 函数,否则会报错。
      // 代表 父类 A 构造函数 返回的 子类B 的实例
      // A.prototype.constructor.call(this)
    )
    // 再声明实例属性
    this.bName = 'B'
  }
  // 此时再 B 可访问 A 的实例属性
}

prototype

构造函数的prototype属性,在 ES6 的“类”上面继续存在。事实上,类的所有方法都定义在类的prototype属性上面。

class A {
  toValue() {} 

  toString() {}
}

等同于
A.prototype = {
  toValue = {}
  toString = {}
}

static 静态方法 静态属性(提名)

加上 static 关键字表示该方法不会被实例继承 再能通过类直接调用(A.getName())
但是会被子类继承
如果静态方法中包含 this 则指向当前类 而不是实例
普通方法内不能调用静态方法 再静态方法内可以调同样是静态方法
且静态方法可以与普通方式同名

静态属性只能再静态方法内访问

class A {

  static introduction = '练习时长两年半'

  constructor() {
    this.hobby = '唱,跳,rap,篮球'
  }

  static getHobby () {
    console.log(this.hobby, this.introduction)
  }
}

const newA = new A()
newA.getHobby()  // TypeError: newA.getHobby is not a function

A.getHobby() // undefined 练习时长两年半

class B extends A {
  constructor() {
    super()
  }
}

B.getHobby() // undefined 练习时长两年半

私有属性 私有方法

私有属性和私有方法 是指只能在类的内部访问的属性和方法
在外部不能访问
实例可以通过 get set 方法访问

class A {
  #hobby = '唱,跳,rap,篮球'

  get value () {
    console.log('get', this.#hobby)
    return this.#hobby
  }

  set value (value) {
    this.#hobby = value
  }
}

class B extends A {
  constructor() {
    super()
  }
}

A.#hobby  // SyntaxError: Private field '#hobby' must be declared in an enclosing class

const newB = new B()
newB.value = '练习时长两年半' // set 
newB.value  // get 练习时长两年半

继承 extends

标签:ES6,静态方法,实例,constructor,hobby,class,属性
From: https://www.cnblogs.com/chennr/p/17395996.html

相关文章

  • target method '%s' found on bean target class '%s', but not found in any interf
    targetmethod'%s'foundonbeantargetclass'%s',butnotfoundinanyinterface(s)forbeanJDKproxy.Eitherpullthemethoduptoaninterfaceorswitchtosubclass(CGLIB)proxiesbysettingproxy-target-class/proxyTargetClass......
  • ES6剩余参数
    ES6剩余参数arguments的缺陷:如果和形参配合使用,容易导致混乱从语义上,使用arguments获取参数,由于形参缺失,无法从函数定义上理解函数的真实意图ES6的剩余参数专门用于收集末尾的所有参数,将其放置到一个形参数组中。语法:function(...形参名){}举个例子functionsum(........
  • K8S RuntimeClass
    本文的主要内容就到此为止了,这里为大家简单总结一下:RuntimeClass是Kubernetes一种内置的集群资源,主要用来解决多个容器运行时混用的问题;RuntimeClass中配置Scheduling可以让Pod自动调度到运行了指定容器运行时的节点上。但前提是需要用户提前为这些Node设置好label;......
  • Python OOP & Class private method All In One
    PythonOOP&ClassprivatemethodAllInOnePythonClassprivatemethoddemos代码缩进错误调用私有方法错误#!/usr/bin/python3#类定义classpeople:#定义基本属性name=''age=0#定义私有属性,私有属性在类外部无法直接进行访问_......
  • No matching constructor found in class 'hello问题的解决
    问题描述在Spring的bean配置里面引入java类的相关路径,但是显示上面这个错误问题解决查找资料发现,这个问题的原因就是我引用的这个实体类里面没有无参构造函数的定义,定义之后,就能够正常使用啦!......
  • SLF4J: Class path contains multiple SLF4J bindings.错误解决
    1.出现问题错误如下:SLF4J:ClasspathcontainsmultipleSLF4Jbindings.SLF4J:Foundbindingin[jar:file:/D:/Users/FFprincess/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J:Foun......
  • ES6参数默认值
    ES6参数默认值在书写形参时,直接给形参赋值,附的值即为默认值这样一来,当调用函数时,如果没有给对应的参数赋值(给它的值是undefined),则会自动使用默认值。举个栗子functionsum(a,b=1,c=2){returna+b+c;}console.log(sum(10,undefined,undefined))//13c......
  • Maven的classifier作用
    ​ classifier可以是任意的字符串,用于拼接在GAV之后来确定指定的文件。可用于区分不同jdk版本所生成的jar包<dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.2.2</version><classifi......
  • Maven的classifier作用
    ​ classifier可以是任意的字符串,用于拼接在GAV之后来确定指定的文件。可用于区分不同jdk版本所生成的jar包<dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.2.2</version><classifi......
  • python 学习-打开潘多拉的魔盒-元类(metaclass)学习
    前言在Python里面大家都比较熟悉了,通过class关键字创建一个类,这是通过硬编码来实现的。那么如何动态创建一个类呢,如果给一批数据,让它动态生成一个类?学习警告:不要轻易打开潘多拉的魔盒,潘多拉出于好奇打开一个魔盒,释放出人世间的所有邪恶:贪婪、虚无、诽谤、嫉妒、痛苦等等......