构造函数必须是public吗_谈谈 constructor 的private和public
class TestClass {http: Http;constructor(http: Http){this.http = http;}
}
公有,私有于受保护的修饰符
默认为 public
在上面的例子里,我们可以自由访问程序里定义的成员,在TypeScript里,成员默认为public
,你也可以明确的将一个成员标记成public
。
class Animal {public name: string;public constructor(theName: string){this.name = theName;}public move(distanceInMeters: number){console.log(`${this.name} moved ${distanceInMeters}m.`);}
}
还要注意的是,在构造函数的参数上使用public
等同于创建了同名的成员变量
class Student {fullName: string;constructor(public firstName, public middleInitial, public lastName) {this.fullName = firstName + " " + middleInitial + " " + lastName;}
}interface Person {firstName: string;lastName: string;
}function greeter(person : Person) {return "Hello, " + person.firstName + " " + person.lastName;
}let user = new Student("Jane", "M.", "User");document.body.innerHTML = greeter(user);
理解private
当成员被标记成private
时,它就不能在声明它的类的外部访问:
class Animal {private name: string;constructor(theName: string){this.name = theName;}
}new Animal('Cat').name; // 错误:’name‘是私有的
理解protected
protected
修饰符与private
修饰符的行为很相似,但有一点不同,protected
成员在派生类(子类)中仍然可以访问:
class Person{protected name: string;constructor(name: string){this.name = name;}
}class Employee extends Person{private department: string;constructor(name: string, department: string){super(name)this.department = department;}public getElevatorPitch() {return `Hello, my name is ${this.name} and I work in ${this.department}.`;}
}let howard = new Employe("Howard", "Sales");
console.log(howard.getElevatorPitch());
console.log(howard.name); // 错误
注意:我们不能在Person
类外使用name
,但是我们仍然可以通过Employee
类的示例方法访问,因为Employee
是由Person
派生而来
构造函数也可以被标记成 protected。 这意味着这个类不能在包含它的类外被实例化,但是能被继承。比如,
class Person {protected name: string;protected constructor(theName: string) { this.name = theName; }
}// Employee 能够继承 Person
class Employee extends Person {private department: string;constructor(name: string, department: string) {super(name);this.department = department;}public getElevatorPitch() {return `Hello, my name is ${this.name} and I work in ${this.department}.`;}
}let howard = new Employee("Howard", "Sales");
let john = new Person("John"); // 错误: 'Person' 的构造函数是被保护的.
readonly修饰符
你可以使用 readonly关键字将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化。
class Octopus {readonly name: string;readonly numberOfLegs: number = 8;constructor (theName: string) {this.name = theName;}
}
let dad = new Octopus("Man with the 8 strong legs");
dad.name = "Man with the 3-piece suit"; // 错误! name 是只读的.
完整的例子:
class TestClass {constructor(name: string, private address: string, public city){testMethod(){console.log(this.name)// Compiler error: property 'name' does not exist on type 'TestClass'.console.log(this.address);console.log(this.city);}}
}const testClass = new TestClass('Johnson', '8 gaoke road', 'NanNing');
testClass.testMethod();console.log(testClass.name); // Compiler error: property 'name' does not exist on type 'TestClass'.
console.log(testClass.address); // Compiler error: 'address' is private and only accessible within class 'TestClass'.
console.log(testClass.city) // NanNing
总结:
Angular 有些constructor是简写的方式,并没有主体内容,理解背后的原理至关重要。
构造函数必须是public吗_谈谈 constructor 的private和public相关推荐
- this调用语句必须是构造函数中的第一个可执行语句_谈谈JavaScript中的函数构造式和new关键字...
您是否曾困惑于 Javascript 中的new关键字呢?是否曾想理解关于 function 和 constructor 的区别是什么呢? 大多数 Javascript 的新开发者不太想要使用new关 ...
- c 与java 反射性能_谈谈Java 反射的快慢
[相关学习推荐:java基础教程] 反射到底是好是坏 说到Java 中的反射,初学者在刚刚接触到反射的各种高级特性时,往往表示十分兴奋,甚至会在一些不需要使用反射的场景中强行使用反射来「炫技」.而经验 ...
- java面向对象_谈谈Java的面向对象
类的拷贝和构造 C++是默认具有拷贝语义的,对于没有拷贝运算符和拷贝构造函数的类,可以直接进行二进制拷贝,但是Java并不天生支持深拷贝,它的拷贝只是拷贝在堆上的地址,不同的变量引用的是堆上的同一个对 ...
- 互联网流量是什么意思_谈谈我理解的流量
互联网流量是什么意思_谈谈我理解的流量 我们先从标题说起,谈谈我理解的流量.流量前并没有加互联网,也没有加线上.线下,也没有加付费.免费,说明这个是包含所有流量.当然这个不包含手机流量那一类!为什么今 ...
- aspect 方法入参 获取_谈谈Spring AOP中@Aspect的高级用法示例
前言 本文主要跟大家分享介绍了关于Spring AOP中@Aspect的高级用法,下面话不多说了,来随着小编一起看看详细的介绍吧. 1 切点复合运算 支持在切点定义中加入以下运算符进行复合运算: 运算 ...
- public、protected、default、private区别
public.protected.default.private: 修饰符 本类 同包 子类 其他 public √ √ √ √ protected √ √ √ × default √ √ × × p ...
- 公钥(Public Key)与私钥(Private Key)
公钥(Public Key)与私钥(Private Key) 公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部 ...
- java class private_Java class 中public、protected 、friendly、private的区别
转载自:http://hi.baidu.com/ceoct/item/7e136a2417ba6f896f2cc33c Java class 中public.protected .friendly.p ...
- 访问权限修饰符( public,protected,default,private )的使用对象和作用域
使用范围: Java中,外部类的修饰符只能是public或protected(默认)这两种:而类的成员(属性,方法,内部类)的修饰符可以是(public,protected,default,priva ...
最新文章
- 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...
- CentOS系统安装(上):图形/文本界面安装
- 2018焦作网络赛-E- Jiu Yuan Wants to Eat
- 什么是实例对象python_python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的...
- Java并发编程的基础-线程的生命周期
- 久玩玉之魂服务器维护,玉之魂1级到57级挂机心得详情分享
- php 实现同一个账号同时只能一个人登录
- 分析java 线程占用内存_Java线程:保留的内存分析
- 操作系统课设之基于信号量机制的并发程序设计
- WPF 自定义命令 以及 命令的启用与禁用
- 清北考前刷题day6下午好
- Linux云用户,Linux 用户与权限
- python解密m3u8播放_Python3 通过m3u8连接获取完整媒体文件(附全网视频VIP观看方法)...
- Android Studio出现Error:No service of type Factory available in ProjectScopeServices.
- 自主知识产权 曙光龙芯3号服务器将面市
- Make sure that libnvrtc-builtins.so.11.1 is installed correctly.
- Win10系统打开共享文件提示没有权限使用网络资源怎么处理
- 05 hex 格式_hex文件格式总结
- iOS第三方验证简单接入Game Center
- in comment after two dashes (--) next character must be > not (position: START_TAG seen ...