1、Object.defineProperty定义对象属性
Object.defineProperty()
方法允许通过属性描述对象,定义或修改一个属性,然后返回修改后的对象,它的用法如下。
Object.defineProperty(object, propertyName, attributesObject)
Object.defineProperty
方法接受三个参数,依次如下。
- object:属性所在的对象
- propertyName:字符串,表示属性名
- attributesObject:属性描述对象
2、点运算符和方括号运算符
var obj = {};
obj.foo = 'Hello';
obj['bar'] = 'World';
上面代码中,分别使用点运算符和方括号运算符,对属性赋值。
JavaScript 允许属性的“后绑定”,也就是说,你可以在任意时刻新增属性,没必要在定义对象的时候,就定义好属性。
var obj = { p: 1 };
// 等价于
var obj = {};
obj.p = 1;
3、两种定义属性方法定义的属性有何区别
var obj = {};
obj.p = 123;
console.log(Object.getOwnPropertyDescriptor(obj, 'p'));
/*
{value: 123, writable: true, enumerable: true, configurable: true}
configurable: true
enumerable: true
value: 123
writable: true
__proto__: Object
*/
Object.defineProperty(obj, 'p', { value: 246 });
console.log(obj.p)// 246
var obj = {};
Object.defineProperty(obj, 'p', {value:123});
console.log(Object.getOwnPropertyDescriptor(obj, 'p'));
/*
{value: 123, writable: false, enumerable: false, configurable: false}
configurable: false
enumerable: false
value: 123
writable: false
__proto__: Object
*/
Object.defineProperty(obj, 'p', { value: 246 });//报错,Cannot redefine property: p
console.log(obj.p);
Object.defineProperty()
和Object.defineProperties()
参数里面的属性描述对象,writable
、configurable
、enumerable
这三个属性的默认值都为false
。