TypeScript类的静态属性、静态方法 、抽象类、多态
静态属性 静态方法
- es5
1
2
3
4
5
6
7
8
9
10function Person(){
this.run1 = function(){/*实例方法 */
dosomething...
}
}
Person.run2 = function(){ /*静态方法 */
dosomething...
}
var p = new Person()/*run1()需要实例化才可以调用 */
Person.run2() /*静态方法的调用 */ - 比如jq $(‘#box’)相当于实例方法 需要new实现 $.get是jq的静态方法 直接调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16function $(element){
return new Base(element)
}
$.get=function(){//静态方法
}
function Base(element){
this.element=获取dom节点;
this.css=function(arr,value){
this.element.style.arr=value;
}
}
$('#box').css('color','red')
$.get('url',function(){
})TypeScript的静态方法
- static 就是静态方法 在静态方法里面没法调用类里边的属性 需要定义静态属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27class Person_ {
public name:string;
public age:number = 20;
static sex = '男';
constructor(name:string) {
this.name = name
}
run(){//实例方法
console.log(`${this.name}在运动`)
}
work(){//实例方法
console.log(`${this.name}在工作`)
}
//static 就是静态方法 在静态方法里面没法调用类里边的属性 需要定义静态属性
static print(){
console.log('我是静态方法')
var a = new Person_('我在静态方法中')
a.work();
console.log( a.age)
console.log( Person_.sex)//静态属性
}
}
var ps = new Person_('站三')
ps.run();
ps.work();
Person_.print()//外部执行静态方法
console.log( Person_.sex)//外部调用静态属性TypeScript多态
- 父类定义一个方法不去实现,让继承它的子类去实现 每一个子类有不同的表现
- 多态属于继承
1
2
3
4
5
6
7
8
9
10//父类
class Animal {
name:string;
constructor(name:string) {
this.name=name;
}
eat(){ //具体吃什么 不知道 ,具体吃什么?继承它的子类去实现 ,每一个子类的表现不一样
console.log('吃的方法')
}
}1
2
3
4
5
6
7
8class Dog extends Animal{
constructor(name:string){
super(name)
}
eat(){
return this.name+'吃粮食'
}
}1
2
3
4
5
6
7
8class Cat extends Animal{
constructor(name:string){
super(name)
}
eat(){
return this.name+'吃老鼠'
}
}TypeScript中的抽象类
- typescript中的抽象类:它是提供其他类继承的基类,不能直接被实例化。
- 用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。
- abstract抽象方法只能放在抽象类里面
- 抽象类和抽象方法用来定义标准 。标准:Animal_
**这个类要求它的子类必须包含eat方法**
1
2
3
4
5
6
7
8
9
10
11
12
13
14//标准
//abstract定义的类就是抽象类 不能被new直接实例化 主要是给子类提供的一个基类
abstract class Animal_{
public name:string;
constructor(name:string){
this.name=name;
}
//抽象只能出现在抽象类中
//抽象方法不包含具体实现并且必须在派生类(继承的子类)中实现。
abstract eat():any;
run(){
console.log('其他方法可以不实现')
}
} - var a=new Animal() /错误的写法不能直接被实例化。/
1
2
3
4
5
6
7
8
9
10
11class Dog_ extends Animal_{
//抽象类的子类必须实现抽象类里面的抽象方法
constructor(name:any){
super(name)
}
eat(){
console.log(this.name+'吃粮食')
}
}
var dog=new Dog_('小花花');
dog.eat();1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class Cat_ extends Animal_{
//抽象类的子类必须实现抽象类里面的抽象方法
constructor(name:any){
super(name)
}
run(){
console.log(11)
}
eat(){
console.log(this.name+'吃老鼠')
}
}
var cat=new Cat_('小花猫');
cat.eat();