1、静态属性静态方法 在es5中 // 静态属性 静态方法
function Person(){
this.run1=function(){
}
}
Person.name='哈哈哈';
Person.run2=function(){ 静态方法
}
var p=new Person();
Person.name//静态属性的调用
Person.run2(); 静态方法的调用
复制代码
静态方法的使用还是很广泛的,我们经常使用的jquery的设计思想也是存在静态方法。当我们用到
$('#box').css('color','red')
和$.ajax的时候是否有过疑问他是如何实现的呢
$.get $.post,$.、、、都是静态方法,$().css等是实例化方法是在构造函数中定义的方法。
复制代码
demo 构造函数
function Base(element){
this.element=获取dom节点;
this.css=function(arr,value){
this.element.style.arr=value;
}
}
function $(element){
return new Base(element)
}
复制代码
静态方法
$.get('url',function(){ })、$.post('url',function(){ })
复制代码
在es6
class Per{
public name:string;
public age:number=20;
//静态属性
static sex="男";
constructor(name:string) {
this.name=name;
}
run(){ /*实例方法*/
alert(`${this.name}在运动`)
}
static print(){ /*静态方法 里面没法直接调用类里面的属性*/
alert('print方法'+Per.sex);//访问静态属性
}
}
Per.print();//访问静态方法
alert(Per.sex);//访问静态属性
复制代码
2、多态:父类定义一个方法不去实现,让继承它的子类去实现 每一个子类有不同的表现 ,多态属于继承
class Animal {
name:string;
constructor(name:string) {
this.name=name;
}
eat(){ //具体吃什么 不知道 , 具体吃什么?继承它的子类去实现 ,每一个子类的表现不一样
console.log('吃的方法')
}
}
class Dog extends Animal{
constructor(name:string){
super(name)
}
eat(){
return this.name+'吃粮食'
}
}
class Cat extends Animal{
constructor(name:string){
super(name)
}
eat(){
return this.name+'吃老鼠'
}
}
复制代码
3、typescript中的抽象类
它是提供其他类继承的基类,不能直接被实例化。
用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。
复制代码
abstract抽象方法只能放在抽象类里面 抽象类和抽象方法用来定义标准 。 标准:Animal 这个类要求它的子类必须包含eat方法
abstract class Animal{
public name:string;
constructor(name:string){
this.name=name;
}
abstract eat():any; //抽象方法不包含具体实现并且必须在派生类中实现。
run(){
console.log('其他方法可以不实现')
}
}
复制代码
不能直接被实例化
var a=new Animal() /*错误的写法*/
复制代码
正确姿势如下:
class Dog extends Animal{
//抽象类的子类必须实现抽象类里面的抽象方法
constructor(name:any){
super(name)
}
eat(){
console.log(this.name+'吃粮食')
}
}
var d=new Dog('小花花');
d.eat()
复制代码