1. 程式人生 > >js Object.defineProperty 使用

js Object.defineProperty 使用

result pat 只讀 utf-8 fine ack rop console init

語法

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

js Object.defineProperty 使用