proxy的set,get强大多了,它不需要预定义就能监听。我之前回答一个问题写了简单的取值函数 /** * @param target * @param exec 取值属性 * @returns {*} */ function getter(target, exec = '_') { return new Proxy({}, { get: (o, n) => { return n === exec ? target : getter(typeof target === 'undefined' ? target : target[n], exec) } }); } 这是使用方法,调用对象任意深度属性不会报错 let obj = { school: { class1: { student: 50 } } }; console.log(getter(obj).school.class1.student._)//50 console.log(getter(obj).school1.class11.student._)//undefined 回答的时候我在想是否可以通过defineProterty来使这个函数兼容性更高,后面发现同样的逻辑仅使用defineProterty根本做不到,原因是defineProterty没办法监听到未定义属性的set,get,这点就被proxy完爆了
proxy
的set
,get
强大多了,它不需要预定义就能监听。我之前回答一个问题写了简单的取值函数
这是使用方法,调用对象任意深度属性不会报错
回答的时候我在想是否可以通过
defineProterty
来使这个函数兼容性更高,后面发现同样的逻辑仅使用defineProterty
根本做不到,原因是defineProterty没办法监听到未定义属性的set
,get
,这点就被proxy
完爆了