普通面对对象
function Person( name,age){
this.name=name;
this.age=age;
}
Person.prototype..sayhello=function( ){
console.log(this.name)
}
//实例
const p=new Person('kaivon' , 18);
p . showName( );
//ES6面向对象
class whitePerson(name,age){
constructor:{
this.name=name;
this.age=age;
} //注意这不能写逗号
showName( ){
console.log(this.name)
}
}
const p1=new whitePerson('kaivon' , 18);
p1 . showName( );
class是一个声明,与var,let一样。它的作用是声明一个类
语法
class name[extends]{
//class body
}
extends为继承,是个可选参数
注意:
声明的类还是构造函数
不能重复声明,会报错(相当于声明一个变量,与let,const一样)
与ES5写的构造函数行为一致,除了原型里方法的可枚举性以外
共享方法(实例方法)直接写,它会自动放在prototype上
共享属性(实例属性)需要写在constructor里
共享属性和方法
1,类里的this指向实例,所以属性都放在this上,一般会在constructor里去定义
2,共享方法放在大括号内,因为大括号内容的方法会最终放到prototype里
私有属性与方法
1,ES6规定大括号里面只能放方法,不能放属性,
2,或者在类的外面添加属性,
3,私有方法可以被其他子类继承
new . target属性 返回构造函数(类)
1,一般用在构造函数之中,在class内部指向构造函数
2,如果构造函数不是通过new命令调用的,将返回undefined
3,当有继承的时候,它放回子类
class的方法也有私有的:加个static
//get和post
class Pop{
get att( ){
return '你获取了'
}
set att( ){
console.log(`你设置了个${value}`);
}
}
const p1=new Pop( );
console.log( p1.att ); //你获取了
p1.att='名字' ; // 你设置了个名字