const Person = class{
constructor(name,age){//构造函数在对象实列化(调用new的时候)的时候执行
// console.log(`ES6的构造函数:${name},${age}`)
//属性在构造函数中
this.name = name;
this.age = age;
}
//在对象内部直接定义方法,不用挂在对象的prototype上
showName(){
return `ES6名字:${this.name}`;
}
showAge(){
return `ES6年龄:${this.age}`;
}
}
/*
* 注意:ES6里面class没有提升功能,在ES5,用函数模拟可以,默认提升
* this指向,正常使用没毛病
* */
let aaa = "jiangfei";
const Person = class{
constructor(name,age){//构造函数在对象实列化(调用new的时候)的时候执行
// console.log(`ES6的构造函数:${name},${age}`)
//属性在构造函数中
this.name = name;
this.age = age;
}
//在对象内部直接定义方法,不用挂在对象的prototype上
showName(){
return `ES6名字:${this.name}`;
}
showAge(){
return `ES6年龄:${this.age}`;
}
[aaa](){//相当于名字 通过了变量替换写在 []中 这里为定义 [a+b]里面可以用拼接
console.log(`我是类方法定义的其他形似`)
}
}
/*
* 矫正this指向:
* 1.fn.call(this指向,args1,args2....)
* 2.fn.apply(this指向,[args1,args2...])
* 3.fn.bind()
* */
class Person{
constructor(){
this.name = "marin";
this.showName = this.showName.bind(this);//改变this指向
// this.showName = this.showName.call(this);
//this.showName = this.showName.apply(this);
}
showName(){
return `名字:${this.name}`;
}
}
let person = new Person();
//console.log(person.showName());正常调用
let {showName} = person;//用解构赋值方式 非正常调用 这时要去改变this指向
console.log(showName());
/*
* 静态方法:就是类身上的方法 是由对象本身调用的
*
* */
class Person{
constructor(){
}
showName(){
return `这是类里面的方法`
}
//类的静态方法
static showAaa(){
return `这是类的静态方法`
}
}
let person = new Person();