描述:
JS面向对象——defineProperty方法的封装
描述:
/* * Object.defineProperty(目标对象,属性/方法,属性描述对象) * 属性描述对象 Descriptor * * configurable 是否该属性可删除 * enumerable 是否该属性可遍历(是否可枚举) * writable 是否该属性可修改 * value 设置该属性的值 * * 访问器属性,如果使用访问器属性,不能设置writable和value值 * 设置setter函数,设置属性值的函数 * set:function (value) { this._a=value; }, 设置getter函数,获取属性值的函数 get:function () { return this._a; } * */
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var obj = {
a: 1,
b: 2
}
Object.defineProperty(Object.prototype, "addKey", {
value: function (key, value, enumerable, writable, configurable) {
if (!enumerable) enumerable = false;
if (!writable) writable = false;
if (!configurable) configurable = false;
Object.defineProperty(this, key, {
value: value,
enumerable: enumerable,
writable: writable,
configurable: configurable
})
}
})
//测试数据
obj.addKey("c", 50, true, true);
console.log(obj);
obj.c = 60;
for (var key in obj) {
console.log(key, obj[key]);
}
</script>
</body>
</html>