1.瞭解類的使用
class Person{
constructor(name,age){
this.name=name;
this.age=age;
}
toString(){
return `姓名:${this.name}—— 年齡:${this.age}`
}
}
let p=new Person('法外狂徒張三',30);
console.log(p.toString());
console.log(typeof Person);
console.log(Person===Person.prototype.constructor);
Object.assign(Person.prototype,{
run(){
console.log("跑步");
}
})
p.run();
console.log(Object.keys(Person.prototype));
console.log(Object.getOwnPropertyNames(Person.prototype));
console.log(Reflect.ownKeys(Person.prototype));
2.constructor構造函數
2.1constructor方法是類的默認構造方法,通過new命令生成對象實例,自動調用該方法。
一個類必須有有constructor方法 如果沒有主動定義 那麼系統會自動添加一個空的constructor方法
class Person{
}
class Person{
constructor(){
}
}
2.2 默認情況下 constructor返回實例對象this,但是也可以通過return返回指定的對象
class Person{
constructor(){
return{
name:'zs'
}
}
}
console.log(new Person() instanceof Person);
console.log(new Person());
2.3 類必須使用new調用,否則報錯
let p=Person();
3.類的實例
let f='favorite';
let s='sport';
class Person{
constructor(name){
this.name=name
}
getName(){
return this.name;
}
setName(name){
this.name=name;
console.log("設置了新的名字");
}
[f+s](){
console.log("跑步");
}
}
let p1=new Person('zs');
let p2=new Person('ls');
console.log(p1.__proto__===p2.__proto__);
p1.setName='ww';
console.log(p1.getName);
4.靜態方法
class Person{
static classMethod(){
console.log(this===Person);
console.log("靜態方法 實例無法調用");
}
classMethod(){
console.log(this instanceof Person);
console.log("實例方法 實例可以調用");
}
}
let p=new Person();
Person.classMethod();
p.classMethod();
5.靜態屬性
class Person{
}
Person.sport="跑步";
console.log(Person.sport);
let p=new Person();
console.log(p.sport);
6. 私有屬性和私有方法
let foo=Symbol('foo');
class Person{
constructor(){
this._privateAttr='私有屬性';
this.publicAttr='公有屬性';
}
publicMethod(){
console.log("公有方法")
}
_privateMethod(){
console.log('私有方法')
}
[foo](){
console.log("使用Symbol設置私有方法")
}
}
let p=new Person();
p.publicMethod();
p._privateMethod();
p[foo]();