给前端介绍对象啦!(TypeScript 版)(二)

阅读数:2 2020 年 1 月 7 日 15:39

给前端介绍对象啦!(TypeScript版)(二)

OOP 三大特征

封装:你办事,我放心。我不知道你内部如何运作。

类是属性和方法的集合,封装就是对外暴露可操作的属性和方法,隐藏其他实现细节。属性描述同一类事物的特征,方法描述同一类事物的操作。例如:下面 Animal 类,对外暴露可读写的 name/age/totalNum 成员属性和可调用的 eat()/sleep()/say() 成员方法。后面还有一些例子中 private 属性和方法,是不对外暴露的隐藏属性和方法。

抽象类含有未实现的抽象方法,等待子类去实现,所以不能实例化。例如:抽象类 Animal 含有未实现的抽象方法 say(),。

静态属性和静态方法是类所有,并不是每个对象所有,是全局性的属性和方法。例如:静态成员变量 totalNum 是类所有,记录已实例化动物总数。
(温馨提示:左右滑动可查看全部代码)
// 抽象类

复制代码
abstract class Animal {
public static totalNum = 0; // 静态成员
constructor(public name: string, public age: number) {// 转化为成员变量语法糖
Animal.totalNum++;
};
public eat() {
console.log("I am eating someting");
}
public sleep() {
console.log("I am sleeping");
}
public abstract say();
}

测试用例:
(温馨提示:左右滑动可查看全部代码)
// let animal: Animal = new Animal(“Error”,10);// 编译报错:无法创建抽象类。

继承:龙生龙,凤生凤,老鼠的儿子会打洞

子类继承了父类所有的属性和方法,并可以拥有自己新的属性和方法。继承解决了代码重用的问题。例如:Dog 类继承了 Animal 类,拥有了 Animal 类所有的属性和方法 name//age/sleep()/eat() /say()。并且可以覆盖和扩展,eat() /say() 覆盖了父类的方法实现, wagtail() 是扩展出父类没有的新方法。

private/protected/public 关键字,限定了对外可见范围。private 只能在类内部访问;protected 只能在类和子类内部访问;默认 public,在类内部外部都能访问。
(温馨提示:左右滑动可查看全部代码)

复制代码
class Dog extends Animal {
private shoutNum: number = 3;
public eat() {// 多态 覆盖原方法
console.log("I am eating meat");
}
private getShoutSting(): string{
let shoutString: string='';
for(let i=0;i<this.shoutNum;i++){
shoutString+="Wong!";
}
return shoutString;
}
public say() {
console.log(this.getShoutSting());
}
public wagTail() {// 扩展新方法
//...
}
}

测试用例:
(温馨提示:左右滑动可查看全部代码)

复制代码
let myDog: Animal = new Dog("DaHuang", 5);
myDog.sleep();//I am sleeping
myDog.eat();//I am eating meat
myDog.say(); //Wong!Wong!Wong!
// myDog.getShoutSting();// 编译错误

本转载自 Think 体验设计公众号。

原文链接: https://mp.weixin.qq.com/s/CXaasAzRMk3mD_waWv8DHQ

评论

发布