var obj= {};
//defineProperty为设置对象的属性的属性特征 value设置熟悉名,enumerable设置该属性是否可以被枚举
//未设置的枚举的属性不能被for in遍历和keys获取
Object.defineProperty(obj, "a", { value : 1, enumerable:true });
Object.defineProperty(obj, "b", { value : 2, enumerable:false });
Object.defineProperty(obj, "c", { value : 3,enumerable:true });
Object.defineProperty(obj,"d",{value:4,enumerable:false});
obj.name="qinyi";
console.log(Object.keys(obj));
for (let i in obj){
console.log(i);
}
/**
* getter和setter设置对象属性的读写监听
* @constructor
*/
function Archiver() {
this._temperature = null;
this._archive = [];
//defineProperty主要用于对对象的真实属性进行封装,让真实属性不直接被外部访问
//mvvm的双向数据绑定就是getter和setter实现的数据更新同时触发模板层重新构建渲染传值
Object.defineProperty(this, 'temperature', {
get: function() {
return this._temperature;
},
set: function(value) {
this._temperature=value;
this._archive.push({ val: value });
}
});
this.getArchive = function() { return this._archive; };
}
var arc = new Archiver();
arc.temperature = 11;
arc.temperature = 13;
console.log(arc.temperature);
console.log(arc.getArchive());
原文博客
https://www.cnblogs.com/lvmylife/p/8327961.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
JS原生-对象的属性特征defineProperty
最新推荐文章于 2024-04-29 11:59:06 发布