面试题如何实现a===1 && a===2 && a===3返回true

思路:每一次访问a的时候a的值+1

定义对象中的属性
Object.defineProperty()
接收三个参数:object对象、对象中的属性,属性描述符
Object.defineProperties()
接收两个参数:object对象,{对象中的属性:{属性描述符}}

属性描述符
configurable:设置为true时,表示可以改变其他属性描述符,可以删除属性,默认为false
writable:是否可赋值,默认为false
enumerable:是否可遍历,默认为false
(题外话:for-in遍历可枚举的实例属性和原型对象上的属性,Object.keys()遍历可枚举的属性,Object.getOwnPropertyNames()遍历所有实例属性)
value:属性值

get:访问该属性时自动调用
set:设置该属性值时自动调用

注:(value/writable)和(get/set)同时存在会产生异常

解决方案

var  _a = 1;
Object.defineProperty(this,'a',{
	get:function(){
		return _a++
	}
})
console.log(a===1 && a===2 && a===3)
结果为:true

你可能感兴趣的:(defineProperty)