//俗话说的好,用了js的class类之后,万物皆可new一个对象,我忘了new多少个对象了==
//创建一个类函数
class UserInfo {
//公共myName字段
myName = 'my name is 奥利给';
//私有实例字段(只有在UserInfo主体里调用该字段,别处调用会报错)
//前面加上#号就为私有
#myPrivateName = 'my name is 私密字段';
//公共静态字段(静态字段或方法方法调用直接在类上进行,不能在类的实例上调用。静态方法通常用于创建实用程序函数。)
static admin = 'admin';
//私有静态字段
static #privateAdmin = 'privateAdmin';
//公共静态方法
static tips(title) {
return title
}
//getter 和 setter 模仿常规字段,但是对如何访问和修改字段有更多控制。
//在尝试获取字段值时执行 getter,而在尝试设置值时使用 setter。
//设置
set setName(name){
//防止name为空报错跳出
if (name === '') {
throw new Error(`name不能为空`);
}
this.name = name
}
//获取
get getName(){
return this.name
}
//获取name的方法
getNewName(){
return this.name
}
//constructor构造函数
constructor(name,age,sex,height) {
this.name = name;
this.age = age;
this.sex = sex;
this.height = height;
}
}
//实例化一个对象
var user = new UserInfo('我是父类','40','男','180');
console.log('父类UserInfo----\n',user);
//调用静态字段(静态字段只能在UserInfo类里调用)
console.log('\n父类UserInfo----调用静态字段\n',UserInfo.prototype.constructor.admin);
//调用静态方法
console.log('\n父类UserInfo----调用静态方法\n',UserInfo.tips('我是公共静态方法'));
//调用父类setter方法
console.log('\n父类UserInfo----调用父类setter方法\n',user.setName = '我是调用set的方法修改的name');
//调用父类getter方法
console.log('\n父类UserInfo----调用父类getter方法\n',user.getName);
//子类继承父类
class SonUserInfo extends UserInfo {
constructor(name,age,sex,height) {
//使用this前必须先加super,不然会报错
//使用父类的构造函数
super('名字','年龄','性别','身高');
}
//使用父类的方法获取name值
getName() {
//调用父类里面的方法赋值给name
const name = super.getNewName();
if (name === '') {
return 'Unknwon';
}
return name;
}
}
//实例化一个对象
var sonUser = new SonUserInfo('我是子类','20','女','170');
console.log('\n子类SonUserInfo----\n',sonUser);
//在子类中调用私有字段(方法)会报错:
// console.log(sonUser.#myPrivateName);
//Private field '#myPrivateName' must be declared in an enclosing class 私有字段“#myPrivateName”必须在封闭类中声明
//调用父类里面的方法
console.log('\n子类SonUserInfo----调用父类方法获取的name\n',sonUser.getName());
javascript class类基础用法-01
于 2021-12-27 17:52:00 首次发布