如何为嵌套对象使用 javascript 代理 [英] How to use javascript proxy for nested objects
本文介绍了如何为嵌套对象使用 javascript 代理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在 js bin 中有这个代码:
var 验证器 = {设置(目标,键,值){控制台日志(目标);控制台日志(键);控制台日志(值);if(isObject(target[key])){}返回真}}var 人 = {名字:阿尔弗雷德",姓氏:约翰",内部:{工资:8250,专业:.NET 开发人员"}}var 代理 = 新代理(人,验证者)proxy.inner.salary = 'foo'
如果我这样做 proxy.inner.salary = 555;
它不起作用.
但是,如果我执行 proxy.firstName = "Anne"
,那么效果很好.
我不明白为什么它不能递归地工作.
http://jsbin.com/dinerotiwe/edit?html,js,console
解决方案
您可以添加一个 get
陷阱并返回一个以 validator
作为处理程序的新代理:>
var 验证器 = {获取(目标,关键){if (typeof target[key] === 'object' && target[key] !== null) {返回新代理(目标 [key],验证器)} 别的 {返回目标[key];}},设置(目标,键,值){控制台日志(目标);控制台日志(键);控制台日志(值);返回真}}var 人 = {名字:阿尔弗雷德",姓氏:约翰",内部:{工资:8250,专业:.NET 开发人员"}}var 代理 = 新代理(人,验证者)proxy.inner.salary = 'foo'
I have this code in js bin:
var validator = {
set (target, key, value) {
console.log(target);
console.log(key);
console.log(value);
if(isObject(target[key])){
}
return true
}
}
var person = {
firstName: "alfred",
lastName: "john",
inner: {
salary: 8250,
Proffesion: ".NET Developer"
}
}
var proxy = new Proxy(person, validator)
proxy.inner.salary = 'foo'
if i do proxy.inner.salary = 555;
it does not work.
However if i do proxy.firstName = "Anne"
, then it works great.
I do not understand why it does not work Recursively.
http://jsbin.com/dinerotiwe/edit?html,js,console
解决方案
You can add a get
trap and return a new proxy with validator
as a handler:
var validator = {
get(target, key) {
if (typeof target[key] === 'object' && target[key] !== null) {
return new Proxy(target[key], validator)
} else {
return target[key];
}
},
set (target, key, value) {
console.log(target);
console.log(key);
console.log(value);
return true
}
}
var person = {
firstName: "alfred",
lastName: "john",
inner: {
salary: 8250,
Proffesion: ".NET Developer"
}
}
var proxy = new Proxy(person, validator)
proxy.inner.salary = 'foo'
这篇关于如何为嵌套对象使用 javascript 代理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文