如何为嵌套对象使用 javascript 代理 [英] How to use javascript proxy for nested objects

查看:25
本文介绍了如何为嵌套对象使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆