这是es6的新特性,用于实现面向对象的编程
class myClass{
//构造器,默认为空的构造器
//当class在被new时就会调用构造器
//相当于function
//function myClass(name,age){
// this.name=name
// this.age=age
//}
constructor(name,age){
//这些都是实例属性
//只有实例才能访问
this.name=name
this.age=age
}
}
var i=new myClass('小明',18)
class myClass{
static info="这是myClass的静态属性"
}
console.log(myClass.info)
//i.info访问不到
//直接在外部挂载给构造函数就是给function定义静态属性
function myFunction(){}
myFunction.info="这是function的静态属性"
//使用
console.log(myFunction.info)
class myClass{
//只有new出来的实例才能访问
//类无法访问
aFunction(){
console.log('这是myClass的实例方法')
}
}
var i=new myClass()
i.aFunction()
function myFunction(){}
myFunction.prototype.aFunction=function(){
console.log('这是function中的实例方法')
}
//使用
var a=new myFunction()
a.aFunction()
class myClass{
//只有类才能访问
//实例无法访问
static staticFunction(){
console.log('这是myClass的静态方法')
}
}
myClass.staticFunction()
function myFunction(){}
myFunction.staticFunction=function(){
console.log('这是function中的静态方法')
}
//使用
myFunction.staticFunction()
在class内部只能写构造函数,静态属性,静态方法,实例方法
class的静态方法和静态属性都挂载到constructor上,实例属性和方法都挂载到了实例对象上
就是把function封装成了class,class的本质还是function,使用起来更加方便了
class father{
constructor(name,age){
this.nane=name
this.age=age
}
holle(){
console.log('holle')
}
}
class son extends father{
}
继承之后,如果子类中没有定义,就会沿用父类中的方法或属性
子类对父类的方法和属性可以进行重构和重载
但是,如果是继承的父类中有定义构造函数
就必须加一个super()
然后接着添加子类的构造方法,不能将父类中的构造函数覆盖
super()是对父类构造器的一个引用,相当于父类中的constructor()方法直接写入到了子类中