getter和setter 到底是个啥玩意

js中一共有两种属性,一种数据属性,一种访问器属性

访问器属性不包函数值;包含一对getter和setter函数(非必须)

读取访问器属性时会调用getter函数,返回有效值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据

访问器属性不能直接定义,必须使用Object.defineProperty()来定义

用 Object.defineProperty() 添加的属性值是不可修改的。

//Object.defineProperty(obj, prop, descriptor)
//obj 要在其上定义属性的对象。
//prop 要定义或修改的属性的名称。
// descriptor 将被定义或修改的属性描述符。

var book = {
    _year : 2004,
    edition : 1
}
Object.defineProperty(book,"year",{
    get: function(){
        return this._year;
    },
    set: function(newValue){
        if(newValue > 2004){
            this._year = newValue
            this.edition += newValue-2004 
        }
    }
})

book.year = 2005 
alert(book.edition)//2

上述代码创建了一个book对象,两个默认属性是_year和edition

定义了一个访问器属性year 包含getter 和setter两个函数

getter函数返回_year的值,setter函数通过计算来确定正确的版本

当修改访问器属性时触发setter函数,导致_year变成了2005,而edition变成了2

似乎看到了双向绑定的影子,嘿嘿嘿!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 2,224评论 0 6
  • 面向对象的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。ECMAScr...
    DHFE阅读 1,064评论 0 4
  • Chapter 6 面向对象的程序设计 理解对象 使用对象字面量语法创建对象var person = { n...
    云之外阅读 664评论 0 1
  • 喝了点小酒,总会做些平常不会做的,明明知道不好,还是…哪个才是真正的自己?恐怕都是。克制是我,允许放纵的也是我~
    hey夏天的冰杨梅阅读 271评论 0 0
  • 我念旧,但 不是念所有的旧. 我只是一个很平凡,很平凡的人,没有什么特点,我就像是从树上落下的枯叶,人们已经...
    孽葬阅读 193评论 0 0

友情链接更多精彩内容