js对象可扩展性和属性的四个特性(下)
在开始之前需要具备对prototype、__proto__、constructor有一定得了解,可以看看我之前写的一篇文章=>通道
之前的用户管理系统已经差不多了,顺便加了个socket聊天的,但是由于做java后台的哪个朋友节奏跟不上来,所以即时聊天的后台就是node+socket-io写的,,由于用户列表也涉及比较多的用户隐私问题,所以我设置了页面权限和接口权限,然后下面开放的几个账号就只能看到几个页面而已,哈哈。=>通道
体验账号1:账号:“123456”。密码:“123456”
体验账号2:账号:“123123”。密码:“123123”
二、目录对象属性的四个特性
对象的可扩展性
删除属性
检测属性
枚举属性
属性的getter和setter
三、删除属性 1、用指定对象作为原型创建对象 Object.create()说明:
第一个参数是新建对象的原型
第二个参数也就是属性和特性描述的集合
const log = console.log; //返回数据数据的描述 var aa = Object.create({ x: 1 }, { y: { value: 1, writable: false, enumerable: false, configurable: true } }) log(aa) log(Object.getOwnPropertyDescriptor(aa,'y'))说明:
delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性。
delete只能删除自有属性,不能删除继承属性。
delete不能删除可配置为false的属性
const log = console.log; //返回数据数据的描述 var aa = {y:2} Object.defineProperty(aa, 'x', { value: 1, writable: true, enumerable: true, configurable: false }) log(aa); log(delete aa.x); log(delete aa.y); log(aa)说明:
in运算符不仅仅回检测对象自有属性,还会检测继承属性
const log = console.log; var aa={x:1}; log('x' in aa); log('y' in aa); log('toString' in aa)说明:
hasOwnProperty只会检测对对象自有属性,不会检测继承属性
const log = console.log; var aa={x:1}; log(aa.hasOwnProperty('x')); log(aa.hasOwnProperty('y')); log(aa.hasOwnProperty('toString'))说明:
propertyIsEnumerable属性只检测自有属性的可枚举属性
const log = console.log; var aa = { x: 1 }; Object.defineProperty(aa, 'y', { value: 1, writable: true, enumerable: false, configurable: true }) log(aa) log(aa.propertyIsEnumerable('x')); log(aa.propertyIsEnumerable('y')); log(aa.propertyIsEnumerable('toString'))说明:
由get和set定义的属性叫做存取器属性
不同于普通属性它不是一个具体的值,而是由两个方法构成
const log = console.log; var aa = { x: 1 , get y(){ return 1000; }, set y(value){ this.x+=value; } }; log(aa) aa.y=1; log(aa)js对象可扩展性和属性的四个特性(下)
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/41163.html