关于属性中set和get的问题

下面这个例子中 person只有_name这个属性吧 没有name这个属性吧 为什么结果是2而不是undefined

var person = {
    _name: 2,
    get name() { return this._name },
    set name(n) { this._name = n }
}
 
console.log(person.name)
阅读 2.7k
3 个回答

get和set是对象定义中一种属性的绑定机制,它们以属性方法的形式定义了属性,这比直接定义对象属性有一些特殊的优势。
比如get可以定义通过多步计算出来的隐含属性,而set可以通过计算赋值另外的属性,比如:

square={
  sLeng:0
  get area(){return this.sLeng>=0?this.sLeng*this.sLeng:0}
  set area(v){
    if(v>=0){
      this.sLeng=sqrt(v)
    }else{
      this.sLeng=0
    }
  }
}
  

虽然get和set定义是按对象方法来定义的,但使用时又按对象属性来使用(取值或赋值),而且在一个对象定义中,时不可能存在既有普通的对象属性,又有同名get或(和)set对象属性方法的。

欢迎查阅MDN官方文档对get和set的说明:

The get syntax binds an object property to a function that will be called when that property is looked up.

https://developer.mozilla.org...

The set syntax binds an object property to a function to be called when there is an attempt to set that property.

https://developer.mozilla.org...

var person = {
    _name: 2,
    get name() { return this._name },
    set name(n) { this._name = n }
}

你已经设置了name属性了,get name、set name。就相当于name

var person = {
    _name: 2,
    name: 2
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题