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

    语法

    Object.defineProperty(obj, prop, descriptor)

    参数说明:

    obj:必需。目标对象 
    prop:必需。需定义或修改的属性的名字
    descriptor:必需。目标属性所拥有的特性

    返回值:

    传入函数的对象。即第一个参数obj。

    针对属性,我们可以给这个属性设置一些特性,比如是否只读不可以写;是否可以被for..inObject.keys()遍历。

    示例1:

    <!DOCTYPE html>
    <html lang="zh">
    
        <head>
            <meta charset="UTF-8" />
            <meta name="viewport" content="width=device-width, initial-scale=1.0" />
            <meta http-equiv="X-UA-Compatible" content="ie=edge" />
            <title>Object.defineProperty 示例</title>
        </head>
    
        <body>
    
            <script type="text/javascript">
                var ss = {
                    age: 10
                };
                var name = 'mfg';
                Object.defineProperty(ss, 'name', {
                    //设置是否可以枚举
                    enumerable: false,
                    //是否可以删除目标属性
                    configurable: false,
                    // writable 控制是否可以修改(赋值)
                    //获取属性值  
                    get() {
                        return name;
                    },
                    //设置属性值  
                    set(val) {
                        name = val;
                    }
                })
                console.log(ss.name)
                ss.name = 'new value';
                console.log(ss.name);
            </script>
        </body>
    
    </html>

    示例2:

    <!DOCTYPE html>
    <html lang="zh">
    
        <head>
            <meta charset="UTF-8" />
            <meta name="viewport" content="width=device-width, initial-scale=1.0" />
            <meta http-equiv="X-UA-Compatible" content="ie=edge" />
            <title>Object.defineProperty 示例</title>
        </head>
    
        <body>
    
            <script type="text/javascript">
                Object.defineProperties(Object.prototype, 'allkeys', {
                    value: function() {
                        let result = [];
                        for(let i in this) {
                            result.push(i)
                        }
                        return result;
                    },
                    writable: true,
                    //关键配置,不可枚举,这样就可以在for in中遍历不到了
                    enumerable: false,
                    configurable: true
                });
            </script>
        </body>
    
    </html>

    说明:

    示例2的例子,在Object.prototype上增加了方法,同时保证了不被for in遍历到。

     

  • 相关阅读:
    luogu1060开心的金明
    luogu1048采药
    uva1025城市里的间谍
    scoi刷题记录(2019/04/07)
    差分及树上差分的正确食用姿势(2019/2/21学习笔记)
    图论技巧(2019/1/28之一)
    考试反思(2019/1/26学习笔记)
    考试反思(2019/1/22)
    「一本通 5.2 例 5」皇宫看守
    「一本通 5.2 例 3」数字转换
  • 原文地址:https://www.cnblogs.com/mengfangui/p/9081419.html
Copyright © 2011-2022 走看看