JavaScript学习:属性定义的两种方法和不同

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()参数里面的属性描述对象,writableconfigurableenumerable这三个属性的默认值都为false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值