报错
最近在使用 Object.defineProperties 定义属性时报错: Property description must be an object
报错说明:属性描述必须是对象.
当时我是错把 defineProperty 当成了 defineProperties ,这两个乍一看有点像,但是存在一些差别。
区别
Object.defineProperty
该方法会直接在一个对象上定义 一个 新属性,或者修改一个对象的现有属性
Object.defineProperty( obj , prop , descriptor )
obj : 要定义属性的对象。
prop : 要定义或修改的属性的名称或 Symbol 。
descriptor : 要定义或修改的属性描述符
// 使用 __proto__
var obj = {};
var descriptor = Object.create(null); // 没有继承的属性
// 默认没有 enumerable,没有 configurable,没有 writable
descriptor.value = 'static';
Object.defineProperty(obj, 'key', descriptor);
// 显式
Object.defineProperty(obj, "key", {
enumerable: false,
configurable: false,
writable: false,
value: "static"
});
Object.defineProperties
方法直接在一个对象上定义 一个或多个 新的属性或修改现有属性
Object.defineProperties( obj , props )
obj :在其上定义或修改属性的对象。
props:定义其可枚举属性或修改的属性描述符的对象
var obj = {};
Object.defineProperties(obj, {
'property1': {
value: true,
writable: true
},
'property2': {
value: 'Hello',
writable: false
}
// etc. etc.
});