面向对象

本文详细介绍了JavaScript中类的属性定义(实例属性、静态属性、只读属性),继承机制(包括子类覆盖、重写和super关键字),抽象类的使用,以及属性的封装(public、private、protected)。通过实例展示了这些概念的实际应用。
摘要由CSDN通过智能技术生成

直接定义的属性为实例属性 通过实例访问

通过static修饰的称为静态属性或者类属性 通过类访问

通过readonly修饰的称为只读属性 不能修改

static和readonly可以结合使用 定义一个静态只读属性

类中方法修饰和属性一样 区别不能使用readonly修饰

private    当成员被标记成 private时,它就不能在声明它的类的外部访问

protected

public     成员都默认为public

class Person {

name: string

age: number

readonly sex: string

static eyeNumber:number = 2

constructor(name: string,age: number, sex: string) {

this.name = name

this.age = age

this.sex = sex

}

}

继承

/* Dog extends Animal

此时Animal被称为父类 Dog为子类

使用继承后,子类将会拥有父类所有的属性及方法

通过继承可以将多个子类中共有的代码写在一个父类中

这样只需写一次即可让所有的子类都同时拥有父类中的属性和方法

可以在子类中直接添加父类中没有的属性或方法

如果在子类中添加了和父类中相同的方法,则子类方法会覆盖父类方法

这种子类覆盖掉父类的方法称为重写

父类称为基类或者超类 子类可以称为派生类

*/

class Animal {

name: String;

age: Number;

constructor(name: String, age: Number) {

this.name = name

this.age = age

}

sayHello() {

console.log(‘动物叫’);

}

}

class Dog extends Animal {

sayHello() {

console.log(‘汪汪汪’);

}

}

let dog = new Dog(‘旺财’, 3)

dog.sayHello()

class Cat extends Animal {

sayHello() {

console.log(‘喵喵喵’);

}

}

let cat = new Cat(‘咪咪’, 3)

cat.sayHello()

super关键字

// 在子类中使用构造函数 必须对父类的构造函数进行调用 因为constructor对父类中的constructor进行覆盖了

// 子类中可以使用super.xxx调用父类中的函数

class Animal {

name: String;

constructor(name: String) {

this.name = name

}

sayHello() {

console.log(‘动物叫’);

}

}

class Dog extends Animal {

age: Number

constructor(name: String, age: Number) {

super(name)

this.age = age

}

}

const dog1 = new Dog(‘旺财’, 2)

抽象类

抽象类

/*

抽象类做为其它派生类的基类使用。 它们一般不会直接被实例化。

以abstract开头的类为抽象类

抽象类和其他类区别不大, 只是不能用来创建对象

抽象类就是专门用来被继承的类

抽象类中可以添加抽象方法

*/

abstract class Animal {

name: String;

constructor(name: String) {

this.name = name

}

/*

定义一个抽象方法

抽象方法使用abstract开头,没有方法体

抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写

*/

abstract sayHello(): void

}

class Dog extends Animal {

age: Number

constructor(name: String, age: Number) {

super(name)

this.age = age

}

sayHello() {

console.log(‘wangwangwang’);

}

}

属性封装

/*

*   public 公共的 默认值 修饰的属性可以在任意位置访问(修改)

*   private 私有属性 只能在类内部进行访问(修改) 通过在类中添加方法使得私有属性被外部访问 子类中不能访问

*   protected 受保护的  只能在当前类和当前类的子类访问

*/

class Person {

private _name: string

protected _age: number

constructor(name: string, age: number) {

this._name = name

this._age = age

}

get name() {

return this._name

}

set name(value: string) {

this._name = value

}

get age() {

return this._age

}

set age(value: number) {

if (value >= 0) {

this._age = value

}

}

}

const person = new Person(‘张三’, 12)

console.log(person.name)

console.log(person.age)

person.name = ‘李四’

person.age = 22

console.log(person);

简写

// 可以直接将属性定义在构造函数中

class C {

constructor(public name: string, private age: number) {

this.name = name

this.age = age

}

}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值