zoukankan      html  css  js  c++  java
  • Object.defineProperty

    Object.defindPorperty 可以限制属性的更改,监听属性的赋值和获取,vue2就是基于此特性实现的数据同步更新到视图,所以vue2不会支持ie8

    /*
    es5新增
    var obj Object.create(prototype,[object])
    第一次参数是表示创建对象的原型:即obj.__proto__=prototype
    第二次参数是给对象添加属性:{
    height:{
    value:"xxx",//值
    writable:"false",//是否可写
    enumerable:"false",//是否可枚举
    configurable:"false",// 是否可配置 ,false表示不可以delete,并且不可以通过Object.defineProperty来更改属性,value除外
    }
    } 默认全是false,即不可枚举,不可写,不可了再通过Object.defineProperty进行配置和delete

    // es3就有 ie 8 但是使用不了
    Object.defineProperty(obj,propertyName,config)
    1.要更改的对象
    2.属性名
    3.配置{
    value:"xxx",//值
    writable:"false",//是否可写
    enumerable:"false",//是否可枚举
    configurable:"false",// 是否可配置 ,false表示不可以delete,并且不可以通过Object.defineProperty来更改属性,value除外
    get:function(){}
    set:function(v){} // ie9+支持
    }

    */

    /* var pepole = {name:"muyi",age:24};
    var muyi = Object.create(pepole,{height:{value:175,enumerable:"true"}});
    muyi.height=178;
    //delete muyi.height;
    for (var i in muyi)
    {

    console.log(i+" "+muyi[i]);


    }
    */
    // Object.defineProperty(muyi,"height",{
    // value:175
    // })
    // for (var i in muyi)
    // {
    // if(muyi.hasOwnProperty(i)){
    // console.log(i+" "+muyi[i]);

    // }
    // }

    (function(){

    // 设置了属性获取和设置的监听
    var obj = {a:1,b:2};
    Object.defineProperty(obj,"a",{
    set:function(v)
    {
    this._a = v;

    console.log("设置了a"+v);
    },
    get:function()
    {

    console.log("获取了a");
    // return this.a;
    return this._a;
    }

    })

    obj.a=12;
    console.log(obj.a)


    })()

  • 相关阅读:
    [转]用汇编实现原子操作
    贪心算法练习集
    链表练习题集
    STL测试3)优先级队列实现二叉堆
    STL测试2)计算器简单实现
    STL测试
    Java学习笔记(三)
    【JAVA】学习笔记(2)
    【Java】学习笔记(1)
    【机器学习】异常检测算法(I)
  • 原文地址:https://www.cnblogs.com/chillaxyw/p/9009949.html
Copyright © 2011-2022 走看看