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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM