首页 > 代码库 > JavaScript 高级程序设计读书笔记(1)
JavaScript 高级程序设计读书笔记(1)
第6章 面向对象的程序设计
属性的类型
JS 中对象的属性有两种,数据属性和访问器属性(accessor property ),属性有其自身的特性(arrribute),可以理解为关于属性的属性。
数据属性包含4个特性,分别是[[Configurable]], [[Enumerable]], [[Writable]], [[Value]]。
使用 Object.defineProperty 修改属性描述符时,若该属性之前不存在,除了代码里指定的特性值,其他特性值默认将是 false, 举例如下:
let obj = {}; obj.name = ‘test‘; Object.defineProperty(obj, ‘age‘, { writable: false }); Object.getOwnPropertyDescriptor(obj, ‘age‘); // 控制台输出信息如下:注意四个特性值均为 false Object {value: undefined, writable: false, enumerable: false, configurable: false}
访问器属性不能直接定义,必须使用 Object.defineProperty 来定义,包含4个特性,分别是[[Configurable]], [[Enumerable]], [[Get]], [[Set]]。试举例如下:
// 使用访问器属性的常见方式:设置一个属性的值会导致其他属性发生变化
let 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 访问,修改该属性,但是_year前面的下划线是一种常用记号,表示只能通过对象方法访问的属性,注意这是一种约定而不是语言本身的限制。
JavaScript 高级程序设计读书笔记(1)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。