javascript class类基础用法-01

//俗话说的好,用了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());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOJORiny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值