Object.getOwnPropertyDescriptor()
- 定义
该方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)。 - 语法
Object.getOwnPropertyDescriptor(obj, prop) - 参数
obj
需要查找的目标对象
prop
目标对象内属性名称 - 返回值
是一个对象,如果是访问器属性,这个对象的属性有configurable、enumerable、get和set;
如果是数据属性,这个对象的属性有configurable、enumerable、writable和value。
参考链接: https://zhuanlan.zhihu.com/p/109263454
Object.defineProperty()
- 定义
该方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。 - 语法
Object.defineProperty(obj, prop, descriptor) - 参数
obj
要定义属性的对象。
prop
要定义或修改的属性的名称或 Symbol 。
descriptor
要定义或修改的属性描述符。 - 返回值
被传递给函数的对象。
那与对象直接赋值有什么区别呢?如:
var obj = {};
obj.a = 1;
Object.defineProperty(obj, "b",
{
value: 2
});
console.log(obj)
直接赋值新增的属性,属性描述符value是可以修改的,writable、enumerable和configurable都为true;
而使用Object.defineProperty()定义新属性时,若只定义value,则writable、enumerable和configurable默认值为false,导致这个属性不能赋值、不能遍历而且不能删除。
参考链接: https://zhuanlan.zhihu.com/p/39041991