js 属性描述符,js对象属性使用方括号

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: