没有人会等待一个给不了回应的人~私有属性~你让我等得好苦啊!!!

一.实现属性私有就用:#
    'use strict' //严格模式
    class User {
      #site = 'jack'//实现属性私有
      constructor(name) {
        this.name = name
        this.#check(name)//实现方法私有
      }
       //方法私有同属性私有,这里将方法看成一个属性就OK啦
      #check = () => {
        if (this.name.length < 4) {
          throw new Error('不符合要求')//煲仔们,抛出错误后程序终止,没有返回值。
        }
        this.name = name
      }
      
      //以下是附加内容,通过访问器修改地址:
       set host(value) {
        if (!/^https?:\/\//i.test(value)) {
          throw new Error('地址错误')
        }
        this._host = value
      }
       get host() {
        return this._host
      }

    }
    let hd = new User('鸣人之子')
    hd.host = 'https://www.houdunren.com'
    console.log(hd.host);//https://www.bilibili.com
    
    hd.site = 'pink'
    console.log(hd.site);//pink

上述代码中存在的疑问:
1.console.log(hd.site); //pink
解释: 由于 #site 是私有属性,hd.site = ‘pink’ 并不会修改私有属性 #site 的值。
这里实际上是给 hd 实例添加了一个新的公共属性 site,并将其值设置为 ‘pink’。

2.hd.#site = ‘pink’ 会报错:私有属性不能直接进行更改(可以通过访问器中修改: 私有属性只能在类的内部访问和修改,外部无法直接访问。)

User 中添加如下操作:

     //属性私有化后,在内部修改:
       set site(value) {
        this.#site = value
      }
       get site() {
        console.log(this.#site);//pink,证实可以通过访问器修改值
        return this.#site//getter方法必须有返回值
      }

此时在外部操作:hd.site = 'pink',就是真正更改#site的值。

二.类中属性小小总结:
  • 类中直接定义的方法是在原型上。
  • 静态方法是在函数上。
  • 静态属性是在函数上。
  • 直接定义的属性(公共属性)是在实例对象上。
  • 私有属性只是私有化,还是在实例对象上。
三.静态属性:
  //1.静态属性: 
    class Name {
      static site = 'houdunrne.com'//静态属性,直接加到构造函数上
      constructor(name, age) {
        this.name = name
        this.age = age
      }
    }
    let name = new Name('pink', 18)
    console.log(name);

小小点:静态方法不能被实例对象调用。


    //2.静态方法:直接给函数添加的方法:
    class User {
      constructor(name, age) {
        this.name = name
        this.age = age
      }
      static creat(...args) {
        return this(...args)
      }//静态方法直接加到构造函数函数上,User调用。

      show() {
        console.log('houdunrne.com');
      }//show是直接加到原型上
    }
    let h = new User('向军', 18)
    console.log(h);
    console.dir(User);
    h.show()

煲仔们,今天就到这里啦。
记得放松哦,不要卷死我哦!!!
我会默默注视你的~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值