在javascript class中使用get set

以前在es5的对象中使用过get,set,但最近做的项目一般都使用es6然后babel转es5,那么在es6中的class中如何使用get,set呢?特地试了一下,注明 node环境进行测试的.

  • 话不多说直接上代码
// 定义一个元素类
class Element{
  // 构造函数
  constructor(name = '', container = null) {
    this._name = name
    this._container = container
  }

  get name() {
    return this._name
  }
  set name(name) {
    this._name = name
  }
  get container() {
    return this._container
  }
  set container(container) {
    this._container = container
  }
  get fullName() {
    return this.container === null ? this.name : `${this.container.fullName} :: ${this.name}`
  }
}
// 实例化一个element作为顶级元素
let packageA = new Element('packageA')
// 再实例化一个element '放入' packageA中
let packageB = new Element('packageB', packageA)
// 再将block放入 packageB中
let block = new Element('block', packageB)
// 打印其全名,看效果
console.log('packageA fullName:  ', packageA.fullName)
console.log('packageB fullName:  ', packageB.fullName)
console.log('block fullName:  ', block.fullName)
  • 在node环境下,测试结果如下:
PS D:\work\study\demo02> node -v
v8.9.1
PS D:\work\study\demo02> node test.js
packageA fullName:   packageA
packageB fullName:   packageA :: packageB
block fullName:   packageA :: packageB :: block
  • 因为我们没有为fullName写set方法,所以,用户直接给fullName赋值,不会影响我们最终想get到的结果
// 用户想直接给fullName赋值,打印出来的还是packageA :: packageB :: block
block.fullName = '我是来捣乱的...'
console.log('block fullName:  ', block.fullName)
console.log(block)
  • node执行脚本后输出的结果:
block fullName:   packageA :: packageB :: block
Element {
  _name: 'block',
  _container:
   Element {
     _name: 'packageB',
     _container: Element { _name: 'packageA', _container: null } } }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值