构造函数参数前的private
关键字不是用于声明变量私有性的,而是与依赖注入(Dependency Injection,简称DI)相关。当你在构造函数参数中使用private
关键字时,Angular会自动为你的组件或指令创建一个注入实例,并将其作为构造函数参数的私有属性。这样做的好处包括:
-
类型安全:Angular知道你需要的是
ElementRef
类型的依赖,并会在编译时检查类型,确保你不会错误地注入其他类型的服务。 -
简洁的代码:
private
关键字使得你不需要在构造函数内部手动赋值,Angular会自动将依赖注入到对应的私有属性中,简化了代码。 -
自动管理生命周期:Angular会负责这个依赖的生命周期,例如在组件或指令被销毁时,也会相应地处理这个依赖。
-
可读性:通过这种方式,可以清楚地看到哪个依赖是必要的,以及它是如何在组件或指令中使用的。
// 示例1:
export class Demo{nav: string;constructor(public nav: string) {this.nav = nav;this.someFunction();}someFunction(){console.log(this.nav); // Prints out the NavController.}
}// 示例2 简写:
export class Demo{constructor(public nav: string) {this.someFunction();}someFunction(){console.log(this.nav); // Prints out the NavController.}
}
示例2是示例1的简写
结论:无论何时在构造函数参数上指定public或private,都会在类上创建相应的公共/私有变量,并使用参数的值填充该变量.
两个示例生成的JavaScript将是相同的.但是,如果您尝试访问代码中的私有变量,编译器将抛出错误.