导航
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);
var myObj = {
get a() {
return 2;
}
}
Object.defineProperty(myObj, 'b', {
get: function() {
return this.a * 2;
},
enumerable: true
})
console.log(myObj.a);
console.log(myObj.b);
Object.defineProperty(myObj, 'b', {
get: function() {
return 2;
},
enumerable: true,
value: 3 // 报错
})
console.log(myObj.b);
Object.defineProperty(myObj, 'b', {
get: function(){
return 2;
},
enumerable: true,
writable: true // 报错
})
console.log(myObj.b);
var language = {
set current(name){
this.log.push(name);
},
log: []
}
language.current = 'EN';
language.current = 'FA';
console.log(language.log);
var obj = {
get a() {
return this._a; // 返回私有变量_a
},
set a(val) {
this._a = val * 2;
}
}
obj.a = 3;
console.log(obj.a);
const person = {
get name() {
return this.firstName + ' ' + this.lastName;
},
firstName: '',
lastName: ''
}
person.firstName = 'Yang';
person.lastName = 'Lance';
console.log(person.name); // Yang Lance