猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
对象里面的属性名为_year,使用defineProperty()方法的时候用的却是“year”,十分疑惑
代码内容出自《JavaScript高级程序设计(第三版)》141页,讲的是面向对象的程序设计
小佳佳QAQ
浏览 1878
回答 3
3回答
小佳佳QAQ
书中有说明的(以下是原文):访问器属性不包含数据值;它们包含一对儿 getter 和 setter 函数(不过,这两个函数都不是必需的)。在读取访问器属性时,会调用 getter 函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter 函数并传入新值,这个函数负责决定如何处理数据。访问器属性不包含数据值;它们包含一对儿 getter 和 setter 函数(不过,这两个函数都不是必需的)。在读取访问器属性时,会调用 getter 函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter 函数并传入新值,这个函数负责决定如何处理数据。访问器属性不能直接定义,必须使用 Object.defineProperty() 来定义。_year 前面的下划线是一种常用的记号,用于表示只能通过对象方法访问的属性。而访问器属性 year 则包含一个getter 函数和一个 setter 函数。getter 函数返回 _year 的值,setter 函数通过计算来确定正确的版本。我的理解:_year是一个只能通过对象方法访问的内部属性,用于存储对象方法需要用到的值。而访问器属性year通过Object.defineProperty() 来定义,本身不包含数据值,使用get和set读取和设置对象中的属性值,返回值。(year没有在对象字面量中直接体现)_year≠year,_year是普通的属性,只是前面添加了"_"表示其不能直接访问;year是访问器属性,本身就没有数值,主要的工作是定义出来操作_year和edition的值,它也可以访问_year并直接返回_year存储的内容,比如它的get方法。另外,书中的定义多个属性Object.defineProperties()恰好可以解释_year和year是两个不同的属性,书中代码如下:var book = {}; Object.defineProperties(book, { _year: { value: 2004 }, edition: { value: 1 }, year: { get: function(){ return this._year; }, set: function(newValue){ if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } } });以上代码在 book 对象上定义了两个数据属性( _year 和 edition )和一个访问器属性( year )。最终的对象与上一节中定义的对象相同。唯一的区别是这里的属性都是在同一时间创建的。以上内容仅供参考。如有理解错误,请指出,不胜感激!
1
0
1
李晓健
他这个_year 只是在内部用的,其实对外用的是year 他这样做就相当于给 book又添加了一个year属性嘛 只不过你在取year值时,他内部去取的是_year的值,赋值时也是一样,你赋给的是year ,他在内部又把这个值赋给了_year
0
0
0
慕粉4229183
123
0
1
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续