面向对象
定义类
基础语法 通过class关键字
class Person{
//我们可以定义一些公共的属性
title = '人的信息';
//定义一个静态的变量
static height = 180;
//定义属性 初始化属性 constructor用来定义属性
constructor(name,age) {
this.name = name;//this指向的是当前的实列对象
this.age = age;
}
//定义方法/函数
say(){
// console.log(this.name+'能说话');
//注意函数是有返回值的
return this.name+'能说话';//this指向的是当前的实列对象
}
}
对象都是 new关键词 new出来的
类的方法使用
p2.say();有返回值不能直接获得数据
var p2say = p2.say();
console.log(p2say);
类的属性使用 属性是打点调用
console.log(p2.name);
console.log(p2.title);
静态变量的使用
console.log(p2.height);//undefined
console.log(Person.height);//180
总结 static静态成员 不能被实例继承 所以实例打点是获取不到的 需要原型打点获取
总结 定义的这个Person对象 我们称它为 原型对象
p2我们称它为 实例对象 指的就是具体的实在对象
定义子类使用extends关键字 mathperson是子类 person是父类
class ManPerson extends Person{
//私有属性
#p = 123;
//定义属性
constructor(name,age,sex) {
// this.name = name;
// this.age = age;
// 因为name和age属性父类已经有了 这里就不需要像上面两行那样再重新写一边
// 直接把name和age属性写在super里面就行
super(name,age);
this.sex= sex;
}
//定义自己的方法
say(){
var str = '姓名: '+this.name+'年龄: '+this.age+' 能说话';
console.log(str);
}
//私有属性如何获得 可以再类里面自身调用 定义一个方法获得私有属性
getp(){
// console.log(this.#p);
return this.#p;
}
//子类也可以写属于在自己的方法
playGame(type){
return this.name+'喜欢玩'+type;
}
}
子类会继承父类的属性
var M1 = new ManPerson('王五',30,'男');
console.log(M1.age);
console.log(M1.name);
console.log(M1.sex);
调用方法 子类重写了方法 就调用自己的 子 类不写的时候 调用继承的父类方法
如果父类也没有 结果就是undefined
var M1say = M1.say();
// console.log(M1say);
M1.say();
私有属性 不可以直接调用
console.log(M1.p);//undefined
console.log(M1.getp());//123
子类的方法调用并传参数
console.log(M1.playGame('原神'));