依VSCode Class源码 实例化时参数 写法 既当参数又当属性
Posted WingDust
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了依VSCode Class源码 实例化时参数 写法 既当参数又当属性相关的知识,希望对你有一定的参考价值。
在 VSCode 源码中会有这样的代码
export class ChannelServer<TContext = string> implements IChannelServer<TContext>, 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 既当了实例方法的参数又当实例化后属性
- 要写成这样好像需要属性的修饰符 即 private 、readonly
- 应该要对这个参数定义类型,不然它会被默认认为 any
以上是关于依VSCode Class源码 实例化时参数 写法 既当参数又当属性的主要内容,如果未能解决你的问题,请参考以下文章