var obj = {
a: 1
}
console.log(Object.getOwnPropertyDescriptor(obj, 'a'));
修改一个已有的属性,或添加一个新的属性
var obj = {};
Object.defineProperty(obj, 'a', {
value: 2,
configurable: true,
writable: true,
enumerable: true
});
var obj = {};
Object.defineProperty(obj, 'a', {
value: 2,
configurable: true,
writable: false, // 不可写入,但可用 delete 删除
enumerable: true
});
obj.a = 3; // 写入失败 静默失败,严格模式报错
delete obj.a; // 可以删除
var obj = {};
Object.defineProperty(obj, 'a', {
value: 2,
configurable: false, // 禁止配置
writable: true, // 允许读写
enumerable: true
})
obj.a = 3; // 可更改
console.log(obj); // { a: 3 }
var obj = {};
Object.defineProperty(obj, 'a', {
value: 2,
configurable: false,
writable: true,
enumerable: true
})
obj.a = 3;
console.log(obj.a); // 3 更改成功
delete obj.a; //configurable: false 不可以删除
console.log(obj.a); // 3 删除失败
let obj = {a: 1}
obj.a; //属性获取 [[Get]] 默认操作,
// 查找当前属性,然后如果没有查找原型
obj.a = 3; // 赋值操作[[Put]]
// [[Put]]默认操作
1、先看存不存在 getter,setter
2、不存在,再看 writable 是不是 false 不让修改
3、如果不是,就赋值成功
为了改写默认的 [[Get]], [[Put]] 操作
var obj = {
log: ['a', 'b'],
get lastest() {
if (this.log.length === 0) {
return undefined;
}
return this.log[this.log.length - 1];
}
}
console.log(obj.lastest);