js 属性描述符,js对象属性使用方括号
本文给大家带来了一些关于javascript的知识,主要介绍了一些关于面向对象的相关问题,包括属性描述符、数据描述符、访问描述符等等。下面就来看看吧,希望对你有帮助。
【相关推荐:javascript视频教程,web前端】
JavaScript面向对象——属性描述符
JavaScript实际上花了多种编程范式,包括函数式编程和面向对象编程:
JavaScript中的对象被设计成属性的无序集合的集合,像嘻哈表一样,由键和值组成;Key是一个标识符名称,value可以是任何类型或其他对象或函数类型;如果值是函数,那么我们可以叫它对象的方法;
1、如何创建一个对象呢?
创建对象最常用的方法是使用Object类并使用new关键字创建对象,然后将属性或方法存储在对象中:var obj=new Object()
“为什么”
Console.log (obj.name,obj)//why {name: why}后来为了方便,很多开发者直接通过literal forms://literal的方式创建对象
var obj2={ name: jam ,年龄: 8 }
Console.log (obj)//{name: jam ,age: 8}:
2、操作对象的属性——属性描述符
之前我们的属性是直接定义或者添加到对象中的;
但这样一来,我们就不能对这个属性施加一些限制:比如这个属性能不能通过delete来删除,在for-in遍历的时候能不能遍历?
如果我们想要精确地控制一个属性,那么我可以使用属性描述符。属性描述符可以准确地添加或修改对象的属性;
属性描述符需要使用Object.defineProperty来添加或修改属性。
2.1数据描述符
数据描述符是具有值的属性,该值可以是可写的,也可以是不可写的。数据描述符有以下可选键值:
值:该属性的对应值。可以是任何有效的JavaScript值(数值、对象、函数等。).默认值是未定义的。Writable:当且仅当属性的writable为true时,值才可以由copy操作符更改。默认值为false。可配置的:当且仅当该属性的可配置性为真时,属性描述符才能被改变,属性才能从相应的对象中删除。默认值为false。Enumerable:当且仅当该属性的enumerate为true时,该属性才能出现在对象的enumeration属性中。默认值为false。
2.2.1、获取属性描述符 Object.getOwnPropertyDescriptor()
object . getownpropertydescriptor()方法返回与指定对象的自有属性相对应的属性描述符。
对象。GetownPropertyDescriptor (obj,prop)obj:要查找的目标对象prop:目标对象中的属性名(字符串类型)。返回值:如果对象上存在指定的属性,则返回其属性描述符对象;否则,返回undefined。
2.1.2、设置属性描述符 Object.defineProperty
Object.defineProperty()方法将直接在对象上定义新的属性,或者修改对象的现有属性并返回此对象。
Object.defineProperty(obj,prop,descriptor)obj:要定义属性的对象。Prop:要定义或修改的属性的名称。Descriptor:要定义或修改的属性描述符的返回值:传递给函数的对象。下面的示例代码显示了属性描述符的设置和获取。
var obj={
名称:“果酱”,
年龄:8岁
}
Object.defineProperty(obj, job ,{
价值:“律师”
})
console . log(object . getownpropertydescriptor(obj, age )//{ value:8,writable: true,enumerable: true,configurable: true }
Console.log(obj.job) //律师
defineProperty添加的新属性是不可修改、不可删除、不可枚举的。
console . log(object . getownpropertydescriptor(obj, job )//{ value: lawyer ,可写:false,可枚举:false,可配置:false}:
(1)configurable在对象上是否可删除
varobj={
名称:“果酱”,
年龄:8岁
}
Object.defineProperty(obj, address ,{
值:河北,
//configurable不能删除该属性,不能再次使用defineProperty修改属性描述符。
可配置:假,
})
Delete obj.address //我想用Delete删除这个属性
Obj . address= Guangzhou //您要将obj中属性的地址值修改为Guangzhou。
Console.log(obj.address) //输出结果:河北
(2)enumerable 是否可枚举遍历
var obj={
名称:“果酱”,
年龄:8}Object.defineProperty(obj, sex ,{
值:“男性”,
//enumerable配置是否可以枚举该属性。
enumerable: true})for (i in obj) {
console . log(I)}
(3)writable 该特性控制该属性是否可以赋值(写入值)
var obj={
名称:“果酱”,
年龄:8}Object.defineProperty(obj, score ,{
价值:80,
//可写:true
writable:false })obj . score=100 console . log(obj . score)//80
2.1.3、同时设置多个属性描述符 Object.defineProperties
是不是觉得一次只设置一个属性的属性描述符很繁琐?Object.defineProperties可以帮你解决问题。
Object.defineProperties()方法为对象定义一个或多个新属性或修改现有属性,并返回该对象。
Object.defineProperties(obj,props)obj:要定义属性的对象。Props:要定义其可枚举属性或修改的属性描述符的对象。返回值:传递给函数的对象。示例代码如下:
var obj={
name: jam ,}Object.defineProperties(obj,{
年龄:
值:28,
可写:真,
可配置:假,
可枚举:真
},
作业:{
值:律师,
可写:真,
可配置:假,
可枚举:真
},
性别:
值:“男性”,
可写:假,
可配置:假,
可枚举:真
},
高度:{
值:“1.8米”,
可写:假,
可配置:假,
可枚举:真
} })console . log(obj)//姓名: jam ,年龄:28,职务:律师,性别:男,身高: 1.8m}
2.2存取描述符
访问描述符是getter-setter函数对描述的属性。访问描述符有以下可选键值:
Get:为属性提供getter的方法,如果没有getter,则为undefined。当访问此属性时,将执行方法。当执行该方法时,不会传入任何参数,但会传入此对象。Set:为属性提供setter的方法,如果没有setter,则为undefined。修改属性值时,会触发方法。该方法将接受唯一的参数,即该属性的新参数值。可配置的:当且仅当该属性的可配置性为真时,属性描述符才能被改变,属性才能从相应的对象中删除。默认值为false。当且仅当该属性的可枚举性为真时,该属性才能出现在对象的枚举属性中。默认值为false。
2.2.1 get()与set()的使用
var obj={
名称:“果酱”,
年龄:8岁,
_地址:“河北”
}
//访问描述符的使用场景
//1.隐藏私有属性有望被外界直接使用和赋值。
//2.如果我们想消除某个属性的歧义,我们也将在存储属性描述符访问和设置值时使用它。
Object.defineProperty(obj, address ,{
可枚举:真,
可配置:真,
get: function () {
foo()
归还这个。_地址
},
集合:函数(值){
酒吧()
这个。_address=值
}
})
函数foo () {
Console.log(地址的值被截取一次)
}
功能栏(){
Console.log(“地址的值设置一次”)
}上面的示例代码控制台打印以下结果:
【相关推荐:javascript视频教程,web前端】以上是JavaScript面向对象详细分析的属性描述符的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。