zoukankan      html  css  js  c++  java
  • js对象可扩展性和属性的四个特性(下)

    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)
    

  • 相关阅读:
    如何探索汽车后市场B2B和B2C商业模式?
    当下汽车后市场现状是什么的样?
    怎样解释汽车后市场是什么?
    全球第一开源ERP Odoo操作手册 数据库简介 增加预读提升Odoo文件读取性能
    全球第一开源ERP Odoo操作手册 数据库自动备份
    全球第一开源ERP Odoo操作手册 启用多核来提升Odoo性能
    全球第一开源ERP Odoo操作手册 使用Nginx Upstream来优化Odoo的网络传输性能
    全球第一开源ERP Odoo操作手册 安装ssh服务和ssh客户端
    DES对称加密
    linux下安装python3.7
  • 原文地址:https://www.cnblogs.com/Juaoie/p/12005768.html
Copyright © 2011-2022 走看看