js Object.defineProperty 使用
阿新 • • 發佈:2018-10-24
result pat 只讀 utf-8 fine ack rop console init
語法
Object.defineProperty(obj, prop, descriptor)
參數說明:
obj:必需。目標對象
prop:必需。需定義或修改的屬性的名字
descriptor:必需。目標屬性所擁有的特性
返回值:
傳入函數的對象。即第一個參數obj。
針對屬性,我們可以給這個屬性設置一些特性,比如是否只讀不可以寫;是否可以被for..in或Object.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 使用