前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javascript类(class)

javascript类(class)

作者头像
用户7043603
发布2022-02-26 16:16:31
5600
发布2022-02-26 16:16:31
举报
es6后 js 也支持了类, js的类本质其实就是原型链的语法糖,相对于 javaScript, typeScript的类要比 javaScript 类强大很多.
  • 类声明 javascript中使用类 class Person { constructor(name, age: number) { this.name = name } sayName() { console.log(`my name is ${this.name}`) } } 以上类在typeScript中使用如下 class Person { name: string // 此处必须声明 constructor(name: string, age: number) { this.name = name this.age = age } sayName() { console.log(`my name is ${this.name}`) } }
  • 继承(extends) class Staff extends Person { // 派生类的构造函数必须包含 "super" 调用 constructor(name: string, age: number) { super(name, age) } job(kind: string): void { console.log(`我是${kind}`) } } const xiaohong = new Staff('xiaohong', 20) console.log(xiaohong.name) // 小红 xiaohong.job('coder') // 我是 coder
  • 静态属性 静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性
  • es6

class Person {} Person.propName = 'person'

  • ts

// 比较简洁, 直接通过关键字 static 就可以 class Person { static propName: string = 'person' } console.log(Person.propName)

  • 公共属性
  • es6中 class类代码块内所有的属性方法不经过其他操作的话都是公共的, 是对外可见的
  • ts 公共属性通过关键字 public 声明 如果属性或方法没有声明public, ts 解析时默认会认为是 public
  • 私有属性(private) 只能在类的内部被访问
  • es6 还在提案中,可以通过属性或方法名前加#限制访问.(想使用的话修改 babel 的支持的上限)
  • ts

class Person { private sex: string name: string age: number constructor(name: string, age: number, sex: string) { this.name = name this.age = age this.sex = sex } } const xiaohong = new Person('xiaohong', 20, '男') console.log(xiaohong.sex) // 属性“sex”为私有属性,只能在类“Person”中访问。ts(2341) // 派生类 class Staff extends Person { company: string constructor(name: string, age: number, sex: string, company: string) { super(name, age, sex) this.company = company } getSex() { return this.sex // 属性“sex”为私有属性,只能在类“Person”中访问。ts(2341) } }

  • 受保护的(protected) protected修饰符与 private修饰符的行为很相似,但有一点不同, protected成员在派生类中仍然可以访问, 以上的例子将 private 改成 protected 可以修复报错
  • 抽象类(abstract) 抽象类做为其它派生类的基类使用, 不可以实例化.abstract申明的属性方法一定要在派生类中实现. 与接口的区别是, 抽象类可以包含成员的实现细节. 让我们将上面的例子 Person 加上 abstract 会发生什么 abstract class Person { abstract sex: string name: string age: number constructor(name: string, age: number) { this.name = name this.age = age // this.sex = sex // 不能在构造函数中访问类“Person”中的抽象属性“sex”。 } // 抽象方法 不可以实现方法,只需定义类型即可 abstract sayName(): void } // const xiaohong = new Person('xiaohong', 20, '男') // 无法创建抽象类的实例。 // 派生类 class Staff extends Person { // 非抽象类“Staff”不会实现继承自“Person”类的抽象成员“sex”。 company: string // sex: string constructor(name: string, age: number, sex: string, company: string) { super(name, age) this.company = company // this.sex = sex } // 基类上abstract声明的属性或方法一定要在派生类中实现 sayName() { console.log(`my name is ${this.name}`) }

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • es6后 js 也支持了类, js的类本质其实就是原型链的语法糖,相对于 javaScript, typeScript的类要比 javaScript 类强大很多.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com