jingshuiji/utils/watch_data.js
2025-06-06 15:07:26 +08:00

40 lines
1.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 设置监听器
*/
/**
* 设置监听器
*/
function setWatcher(data, watch) {
Object.keys(watch).forEach(v => {
let key = v.split('.'); // 将watch中的属性以'.'切分成数组
let nowData = data; // 将data赋值给nowData
for (let i = 0; i < key.length - 1; i++) { // 遍历key数组的元素除了最后一个
nowData = nowData[key[i]]; // 将nowData指向它的key属性对象
}
let lastKey = key[key.length - 1];
// 假设key==='my.name',此时nowData===data['my']===data.my,lastKey==='name'
observe(nowData, lastKey, watch[v]); // 监听nowData对象的lastKey
})
}
/**
* 监听属性 并执行监听函数
*/
function observe(obj, key, watchFun) {
var val = obj[key]; // 给该属性设默认值
Object.defineProperty(obj, key, {
configurable: true,
enumerable: true,
set: function (value) {
val = value;
watchFun(value, val); // 赋值(set)时,调用对应函数
},
get: function () {
return val;
}
})
}
module.exports = {
setWatcher: setWatcher
}