通过Object.defineProperty监听对象内数据是否变化,变化了告诉操作者

const obj = {
			a: '',
			b: ''
		}
		for (const key in obj) {
			observerData(obj, key, obj[key]);
		}
		/**
		 * 监听对象里面数据是否变化,发生变化告诉操作者
		 * @param obj 数据对象
		 * @param key 对象的键
		 * @param value 对象的值
		 * **/
		function observerData(obj, key, value) {
			Object.defineProperty(obj, key, {
				get() {
					return value;
				},
				set(newValue) {
					if (value !== newValue) {
						value = newValue;
						render(key, value);
					}
				}
			})
		}

		function render(key, value) {
			console.log("[我的值改变了]", key, value)
		}
/**
		 * JavaScript 中一切都是对象,任何都不例外,
		 * 对全部值类型应用 Object.prototype.toString.call() 方法结果以下
		 * **/
		console.log(Object.prototype.toString.call(Object)); //[object Function]

		console.log(Object.prototype.toString.call({})); //[object Object]

		console.log(Object.prototype.toString.call(Array)); //[object Function]

		console.log(Object.prototype.toString.call([])); //[object Array]

		console.log(Object.prototype.toString.call(String)); //[object Function]

		console.log(Object.prototype.toString.call('')); //[object String]

		console.log(Object.prototype.toString.call(Boolean)); //[object Function]

		console.log(Object.prototype.toString.call(true)); //[object Boolean]

		console.log(Object.prototype.toString.call(Number)); //[object Function]

		console.log(Object.prototype.toString.call(12)); //[object Number]

		console.log(Object.prototype.toString.call(null)); //[object Null]

		console.log(Object.prototype.toString.call(Function)); //[object Function]

		function a() {}
		console.log(Object.prototype.toString.call(a)); //[object Function]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值