依VSCode Class源码 实例化时参数 写法 既当参数又当属性

在 VSCode 源码中会有这样的代码

export class ChannelServer implements IChannelServer, IDisposable {
// ...
    private protocolListener: IDisposable | null;
// ...
    constructor(private protocol: IMessagePassingProtocol) {
        this.protocolListener = this.protocol.onMessage(msg => this.onRawMessage(msg));
        // ...
    }

其中在 Class 实例化方法中参数是这样写的 private protocol: IMessagePassingProtocol
内部又对这个变量以 this.protocol 来使用的
做了一个小测试

class Name {
#n:number
c :number =123
p:number
constructor(private sp:number) {
this.#n = 0
this.p = this.sp
// this.c = 0
}
get k():Function{
return (e: any)=>{console.log(e);
}
}
}
let name1 = new Name(4)
console.log(name1);

使用 Deno 运行 $ deno run test.ts

Name { sp: 4, c: 123, p: 4 }
// 可以看到 sp 既当了实例方法的参数又当实例化后属性
  1. 要写成这样好像需要属性的修饰符 即 private 、readonly
  2. 应该要对这个参数定义类型,不然它会被默认认为 any

你可能感兴趣的