zoukankan      html  css  js  c++  java
  • object.defineproperty&&object.keys

    /*
    Object.defineProperty:
    给一个对象添加或者修改属性 返回一个对象


    参数1:目标对象
    参数2:需要修改或者添加的属性
    参数3:当前属性的一些特征 对象
    value: 设置属性值
    writable: 设置当前属性是否允许被修改
    configurable:设置当前属性是否可以删除
    enumerable:设置当前属性是否可被枚举
    getter---get() 当获取属性值的时候触发的函数
    setter---set() 当设置属性的时候触发的函数

    如何模拟ES6的const?

    //value
    var obj = {};
    Object.defineProperty(obj,"name",{
    value:"宋磊"
    })

    console.log(obj.name)


    //writeable
    var obj = {};
    Object.defineProperty(obj,"name",{
    value:"宋磊",
    writable:false
    })
    obj.name="王多";
    console.log(obj.name)


    //configurable
    var obj = {age:19};
    Object.defineProperty(obj,"name",{
    value:"宋磊",
    configurable:false
    })
    delete obj.age;
    delete obj.name;
    console.log(obj)

    enumerable:
    var obj = {name:"宋磊",age:20};
    Object.defineProperty(obj,"sex",{
    value:"男",
    enumerable:true
    })

    for(var key in obj){
    console.log(key);
    }


    var obj = {name:"宋磊",age:20};
    Object.defineProperty(obj,"sex",{
    value:"男",
    enumerable:true
    })

    console.log(Object.keys(obj))


    Object.keys:把当前对象的属性枚举出来 返回值是一个数组
    for in 与 Object.keys 的区别
    前者可以把原型对象身上的属性枚举出来
    后者不能把原型对象身上的属性枚举出来


    function Fn(){}
    Fn.prototype.type="人类";

    var obj = new Fn();
    obj.name = "宋磊";
    obj.age = 20;
    obj.sex = "男";


    for(var key in obj){
    console.log(key)
    }

    console.log(Object.keys(obj))
    */


    //当使用get set方法的时候不允许使用value和writeable不然会报错

    /*
    数据劫持
    当获取或设置的时候会劫持到新的值
    */
    var obj = {name:"宋磊"};
    Object.defineProperty(obj,"name",{
    configurable:true,
    enumerable:true,
    get:function(){
    console.log("获取了")
    },
    set:function(newStr){
    console.log("设置了新值"+newStr)
    }

    })


    obj.name;

    obj.name = "王多";

  • 相关阅读:
    mysql系列~mysqldump使用技巧
    mysql系列~logrotate
    最详细的经典双向电平转换电路的工作原理图文分析
    《USB应用分析精粹:从设备硬件、固件到主机程序设计》已经完稿
    Windows x86环境下使用QEMU安装arm架构银河麒麟V10操作系统
    不动产测绘包含哪些内容
    java问题收集
    java调用接口(rest-assured)
    java调用接口(okhttp )
    testng+allure
  • 原文地址:https://www.cnblogs.com/carolavie/p/9750761.html
Copyright © 2011-2022 走看看