ECMAScript的两种属性
1.1、数据属性
包含一个数据值的位置,可以进行读取和写入。
四种特性:调用Object.defineProperty(对象名,属性名,{特性名:特性值(true\false)}) // 默认false
[[Configurable]]:默认是true ,表示是否可以进行delete属性操作从新定义属性,定义为false以后
不能再设置为true,此时再次调用Object.defineProperty()除Writable之外都会导致错误
[[Witable]]:默认是true,设置是否可以修改属性的值
[[Enumerable]]:默认是true,表示能否通过for-in循环返回属性
[[Value]]:属性的属性值,默认是undefined
例如:
var person = {};
Object.defineProperty(person,'name',{
writable:false,
value:'张山'
})
console.log(person.name); // 张山
person.name = '里斯'
console.log(person.name); // 张山 并没有修改name属性的值。
Object.defineProperty(person,'name',{
configurable:false,
value:'张山'
})
// 报错
Object.defineProperty(person,'name',{
configurable:true,
value:'张山'
})
1.2、访问器属性:
不包含属性值,包含setter和getter函数(非必需的)
四种特性:
[[configuralbe]]:默认是true,表示是否可以进行delete属性操作从新定义属性,定义为false以后
不能再设置为true,此时再次调用Object.defineProperty()除Writable之外都会导致错误
[[Enumerable]]:默认是true,表示能否通过for-in循环返回属性
[[get]]:默认值是undefined,读取属性值时调用的函数
[[set]]:默认值是undefined,写入属性值时调用的函数
访问器属性不能直接定义必须由Object.defineProperty()调用
例:
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;
console.log(newValue);
}
}
})
book.year = 2005;
console.log(book.edition); //2 浏览器不支持的情况下为1
1.3、定义多个属性
Object.defineProperties(要定义属性的对象,{定义的属性1:{value:值},属性2:{value:值}})
例:
var book = {};
Object.defineProperties(book,{
_year:{
value:2004
},
edition:{
value:1
},
year:{
set:function(newValue){
this._year = newValue;
this.edition += newValue - 2004;
},
get:function(){
return this._year;
}
}
})
book.year = 2005;
console.log(book.edition); //2 浏览器不支持的情况下为1
此时属性的创建时间是在同一时间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署