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遍历到。

     

  • 相关阅读:
    ExtJs之Grid
    [java]转:String Date Calendar之间的转换
    SQL Server脚本备份
    Java实现文件夹的复制(包括子文件夹与文件)
    Android webview使用详解
    zxing条码扫描横屏修改
    Genymotion的安装与eclipse配置教程
    开发中遇到的问题
    sql中COUNT()+GROUP BY +HAVING的组合使用
    由于包名与引用的库名相同导致的报错
  • 原文地址:https://www.cnblogs.com/mengfangui/p/9081419.html
Copyright © 2011-2022 走看看