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'))

2、删除对象属性

delete

说明:

  • 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)


四、检测属性

1、检测对象是否拥有某个属性

in

说明:

  • in运算符不仅仅回检测对象自有属性,还会检测继承属性
    const log = console.log;
var aa={x:1};
log('x' in aa);
log('y' in aa);
log('toString' in aa)

2、检测对象是否拥有某个属性

hasOwnProperty()

说明:

  • hasOwnProperty只会检测对对象自有属性,不会检测继承属性
    const log = console.log;
var aa={x:1};
log(aa.hasOwnProperty('x'));
log(aa.hasOwnProperty('y'));
log(aa.hasOwnProperty('toString'))

3、检测对象是否拥有某个属性

propertyIsEnumerable()

说明:

  • 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'))


五、枚举属性

1、枚举对象中的属性

Object.keys()
    const log = console.log;
var aa = { x: 1 ,y:2};
Object.defineProperty(aa, 'z', {
value: 3,
writable: true,
enumerable: false,
configurable: true
})
log(aa)
log(Object.keys(aa))

2、枚举对象中的属性

Object.getOwnPropertyNames()
    const log = console.log;
var aa = { x: 1 ,y:2};
Object.defineProperty(aa, 'z', {
value: 3,
writable: true,
enumerable: false,
configurable: true
})
log(aa)
log(Object.getOwnPropertyNames(aa))


六、属性的getter和setter

说明:

  • 由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对象可扩展性和属性的四个特性(下)的更多相关文章

  1. js对象可扩展性和属性的四个特性(上)

    # js对象可扩展性和属性的四个特性(上) 一.前言 再次花时间回顾一下基础,毕竟要想楼建的好,地基就要牢固,嘻嘻! 在开始之前需要具备对prototype.__proto__.constructor ...

  2. 遍历js对象中的属性

    可以使用js自带的for in.也可以使用Ext JS中的方法来遍历js对象中的属性 代码如下: /** 遍历对象 */ var person = {name:'张泰松',age:28}; //js方 ...

  3. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  4. js 对象可枚举属性以及for in 循环和for of 循环

    js中每个对象的属性(js里万物皆属性,对象的属性也是对象)都有一个属性叫enumerable(可枚举性),这个属性true/false决定了该对象的属性是否可枚举(就是让一些方法访问到这个属性). ...

  5. js对象—类型和属性特性

    前言 权威指南中摘要的,工作中用不到的,重要的js基础. 三类对象两类属性 内置对象(native object) 是由ECMScript规范定义的对象或者类.例如:函数,数组,日期,正则... 宿主 ...

  6. js 对象的_proto_属性 和函数的prototype属性分析

    bill是 Employee类型的实例,_proto_指向Employee.prototype Employee.prototype有一个constructor属性,指向Employee函数自身 fu ...

  7. [转]js对象中取属性值(.)和[ ]的区别

    原文地址:https://www.jianshu.com/p/6a76530e4f8f 今天在写js的过程中遇到这么一个问题,取一个对象的属性值,通过obj.keys怎么都取不出来,但是用obj[ke ...

  8. js对象数组按属性快速排序

    前一篇<关于selector性能比赛>中提到,目测觉得在$("div,p,a")这样有逗号时,sizzle耗时异常(600多个元素,花了200ms),说是它可能没有优化 ...

  9. 怎样判断JS对象中的属性

    // 如何在不访问属性值的情况下判断对象中是否存在这个属性 var obj = { a: 2 }; Object.defineProperty( obj, 'b', // 让 b 不可枚举 { enu ...

随机推荐

  1. python 3.7.5 官方tutorial 学习笔记

    用了好久python,还没有完整看过官方的tutorial,这几天抽空看了下,还是学到些东西 --- Table of Contents 1. 课前甜点 2. 使用 Python 解释器 2.1. 调 ...

  2. 关于一道你们眼中的水题 Windy数 的乱写(数位dp)

    啊一道水题有什么好说的 上课听不懂,下课泪两行. 有的人什么套路都会,我.. 只能可怜巴巴的抄代码,然后自己总结,顺(zhu)便(yao)颓博客 1.递推dp的思路做到一半死了,怎么也想不出来如何处理 ...

  3. BZOJ 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱(这是我写过最骚气的dp!)

    题目描述 贝西和邦妮找到了一个藏宝箱,里面都是金币! 但是身为两头牛,她们不能到商店里把金币换成好吃的东西,于是她们只能用这些金币来玩游戏了.   藏宝箱里一共有N枚金币,第i枚金币的价值是Ci.贝西 ...

  4. MATLAB基本使用及SIMULINK建模仿真实验

    MATLAB基本使用及SIMULINK建模仿真实验 这是我总结的操作方法: 1 )  M脚本文件的编写 1.新建M-file: 2.输入指令: 3.保存(注意:保存路径需要与工作路径一致) 2 )在S ...

  5. day8-函数

    ---def test(x): # def:定义函数的关键字,test:函数名, x相当于以前函数中的自变量使用函数的好处:1.代码重用2.保持一致性,易于维护3.可扩展性 def test(x): ...

  6. php自定义截取中文字符串-utf8版

    php自定义截取中文字符串-utf8版 UTF-8的编码范围(utf-8使用1-6个字节编码字符,实际上只使用了1-4字节): 1个字节:00——7F 2个字节:C080——DFBF 3个字符:E08 ...

  7. 小程序---电影商城---第三方组件 vant(vant weapp)

    小程序版本主页 https://youzan.github.io/vant-weapp/#/intro (1)创建项目描述文件 package.json ---鼠标右击 miniprogram  目录 ...

  8. SVN--服务端安装和设置---centos7

    一.安装环境 [root@localhost ~]# getenforce Disabled [root@localhost ~]# systemctl disable firewalld 二.yum ...

  9. drf

    跨域同源 django做跨域同源 需要把csrf去掉 跨站请求伪造 同源 同源机制:域名.协议.端口号相同的同源 简单请求 不写头部请求 跨域会拦截报错缺少请求信息 (1) 请求方法是以下三种方法之一 ...

  10. Java设计模式之单利模式(Singleton)

    单利模式的应用场景: 单利模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例.并提供一个全局反访问点.单利模式是创建型模式.单利模式在生活中应用也很广泛,比如公司C ...