class 类名{
属性;
方法;
// 构造方法,实例化类的时候,自动调用
constructor(){
}
}
1.类要实例化,才能调用普通方法
class A {
name = 'zs';
age = 18;
say() {
console.log('一和你聊天,我就成了别人眼中的傻子!');
}
}
// 类要实例化,才能调用普通方法
let a = new A;
// console.log(a);
a.say(); // 一和你聊天,我就成了别人眼中的傻子!
console.log(a.name); //zs
2. 构造方法的使用
// 构造方法的使用
class B {
name = 'ls';
// new的时候自动调用
constructor() {
console.log(this.name);
}
}
new B;
3. 给对象中属性赋值,类中的this指向实例化之后的对象
// 给对象中属性赋值
// 类中的this指向实例化之后的对象
class C {
constructor(name, age) {
this.name = name;
this.age = age;
// 在构造方法中,直接调用其他方法
this.say();
}
say() {
console.log(this);
console.log(this.name);
}
}
let c = new C('zs', 18);
c.say();
4. class的继承
class A {
name = '他爸';
say() {
console.log(this.name + '说:我给你换个妈!');
}
}
// B类继承了A类
class B extends A {
age = 18;
}
var b = new B;
console.log(b.name);
b.say()
class C {
name = 'zs';
age = 18;
constructor(age) {
this.age = age
console.log(age);
}
}
class D extends C {
constructor(info, age) {
// 当子类,父类都有构造方法,需要使用super,调用父类的构造方法
super(age);
this.info = info;
console.log(this.info);
}
}
new D('嘿嘿', 22);
5.静态属性和方法
/*
静态关键字 static
被static修饰的方法和属性,只属于类本身
只能使用类名进行调用
*/
class Goods {
static name = '小姐姐';
age = 18;
constructor() {
// 静态属性和方法的调用,只能用类名,不能使用this
// console.log(Goods.name);
//Goods.info();
// 静态方法
// Goods.demo.bind(this)();
// call() 改变this指向,直接调用
Goods.demo.call(this)
}
say() {
console.log('小姐姐,你知道我为什么单身吗?');
}
// 静态方法中,this指向当前的类
static info() {
console.log('因为还没有向你告白!');
console.log(this);
}
static demo() {
console.log(this.age);
}
}
let g = new Goods;
// g.say();
// g.info();
// Goods.info();