语法
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 使用
原文地址:https://www.cnblogs.com/mengfangui/p/9081419.html