JavaScript | 数据属性与访问器属性
属性类型
数据属性 - 包含一个数据值的位置,可以读取和写入值
[writable] |
是否能修改属性的值 |
true |
[enumerable] |
是否通过for in 循环返回属性(是否可以被枚举) |
true |
[configurable] |
是否能通过delete删除,能否修改属性的特性,能否修改访问器属性 |
true |
[value] |
包含这个属性的数据值,读取属性值的时候从这个位置读取。 |
undefined |
访问器属性
[enumerable] |
是否通过for in 循环返回属性(是否可以被枚举) |
true |
[configurable] |
是否能通过delete删除,能否修改属性的特性,能否修改访问器属性 |
true |
[get] |
读取属性时调用的函数 |
undefined |
[set] |
写入属性时调用的函数 |
undefined |
属性操作
- 定义属性:Object.defineProperty()
-
查看属性:Object.getOwnPropertyDescriptor()
"use strict"; // ***************************************************************** // 操作数据属性 var person = { name: 'hugh', age: 29, sayName: function() { console.log(1); } } // 修改属性默认特性:Object.defineProperty() Object.defineProperty(person, "name", { writable: true, value: 'dong', configurable: false, enumerable: false }); console.log(person); // ***************************************************************** // 操作访问器属性 var book = { _year: 2004, // _作为标记只能通过对象访问的属性 edition: 0 }; Object.defineProperty(book, "year", { // 访问器属性year包含setter和getter函数 get: function() { return this._year; }, set: function(newValue) { this._year = newValue; this.edition = newValue - 2004; } }) book.year = 2008; console.log(book); console.log(book.edition); // 旧方法,ie8部分不支持defineProperty() // 严格模式不可用 // book._defineGetter_("year",function(){ // return this._year; // }); // book._defineSetter_("year",function(newValue){ // this._year = newValue; // this.edition = newValue - 2014; // }); // ***************************************************************** // 定义多个属性 var book2 = {}; Object.defineProperties(book2, { // 数据属性 _year: { value: 2004, writable: false, enumerable: false, configurable: true }, edition: { value: 0, writable: false, enumerable: false, configurable: true }, // 访问器属性 year: { get: function() { return this._year; }, set: function(newValue) { this._year = newValue; this.edition = newValue - 3000; } } }); console.log(book2); // ***************************************************************** // 查看属性的属性 console.log(Object.getOwnPropertyDescriptor(book2,'_year')); console.log(Object.getOwnPropertyDescriptor(book2,'edition')); console.log(Object.getOwnPropertyDescriptor(book2,'year'));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!