抽象类 - abstract

// 抽象类

/**
 * 1. 抽象类可以具体实现,也可以定义抽象方法
 * 2.方法修饰符
 * public 共有的 任何地方都可以访问到
 * private 私有的 不能在类的外部使用,只能在内部使用
 * protected 受保护的 子类中可以使用
 */
abstract class Animate {
  abstract makeSound(): void;
  protected move(): void {
    console.log('动物移动了');
  }
}

// 类既可以是实体类,也可以是个类型
class Dog extends Animate {
  #region: string;
  constructor() {
    super()
    this.#region = '庄子'
  }
  makeSound(): void {
    console.log('汪汪汪');
  }
  private uname: string = "于谦"
}

const dog: Dog = new Dog()
console.log((dog as any).region);
dog.move()
dog.makeSound()

class Demo {
  #num: number
  constructor() {
    this.#num = 32
  }
}

const s = new Demo
console.log(s.num);

在这里 需要在 tsconfig.ts 中设置 lib:es2015 以上 才能使用 # 内部私有变量 

在类中使用私有属性时 严格意义上通过这种方式

class Demo {
  #num: number
  constructor() {
    this.#num = 32
  }
}

const s = new Demo
console.log(s.num);

执行 tsc 编译之后将会是是以下结果

var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
    if (kind === "m") throw new TypeError("Private method is not writable");
    if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
    if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
    return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var _Demo_num;

// 注意,编译之后这里将使用的是 WeakMap 来存储私有变量
var Demo = /** @class */ (function () {
    function Demo() {
        _Demo_num.set(this, void 0);
        __classPrivateFieldSet(this, _Demo_num, 32, "f");
    }
    return Demo;
}());
_Demo_num = new WeakMap();
var s = new Demo;
console.log(s.num);

当使用 private 定义私有属性时,

class Demo {
  private num: number
  constructor() {
    this.num = 32
  }
}
const s = new Demo
console.log(s.num);

 编译将会是

 故而通过这种方式定义私有,实际上很容易被修改到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放逐的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值