看中文文档的时候有一句话:类装饰器表达式会在运行时当作函数被调用,类的构造函数作为其唯一的参数。
但是下面的例子中,我打印的参数为什么等于类。所以我认为类的装饰器参数不应该是类本身吗?为什么说是类的构造函数?
function testDecorator(target: any) {
console.log(target, target === Test) // 输出 [class Test] true
}
@testDecorator
class Test {
name: string;
constructor(name: string) {
this.name =name
}
}
new Test('')
类本身与类构造函数是一个东西吗?
跟装饰器无关,ES6 class 的构造函数本来就等于 class 自身……
别被 class 迷惑了,它跟其他真正的 OOP 编程语言不一样,JS 里实质就是个语法糖,其实还是 function。上面代码就等于:
这个 function Test 跟上面的 class Test 里的 constructor 是一回事儿。
你要是有过 Java/C# 之类 OOP 语言的经验,可能会被绕进去,因为这些编程语言里类就是类、构造器就是构造器,确实不一样。