依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 既当了实例方法的参数又当实例化后属性
  1. 要写成这样好像需要属性的修饰符 即 private 、readonly
  2. 应该要对这个参数定义类型,不然它会被默认认为 any

以上是关于依VSCode Class源码 实例化时参数 写法 既当参数又当属性的主要内容,如果未能解决你的问题,请参考以下文章

Verilog实例化时的参数传递

若依框架怎么给定时任务传参数

实例化时自动加载PHP类(PHP5)

在 Python 中实例化时选择子类

python中子类在实例化时,能否增添父类没有的初始属性?

为啥 ICollection 索引在实例化时不起作用?