繁体   English   中英

如何使用代理申请陷阱?

How to use Proxy Apply trap?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

为什么我的提现功能陷阱不起作用?

const checkingAccount = {
    owner: 'Saulo',
    funds: 1500,
    withdraw: function(amount) {
      this.funds -= amount;
      console.log('withdraw ' + amount + '. Current funds:' + this.funds);
    },
    deposit: function(amount) {
      this.funds += amount;
      console.log('deposit ' + amount + '. Current funds:' + this.funds);
    }  
}

checkingAccount.withdraw(100);
checkingAccount.withdraw(2000);
checkingAccount.deposit(650);
checkingAccount.withdraw(2000);
checkingAccount.withdraw(2000);
checkingAccount.funds = 10000;
checkingAccount.withdraw(2000);

到目前为止一切都很好:checkingAccount就像我期望的那样胡扯

// my proxy handler
const handler = {
  set: (target, prop, value) => {
    if (prop === 'funds') {
      throw 'funds cannot be changed.'
    }
    target[prop] = value;
    return true;
  },
  apply: (target, context, args) => {
    console.log('withdraw method should execute this console.log but it isn\'t.');
  },
  /* this is the function I want to use to replace original withdraw method
  withdraw: function(obj, amount) {
    console.log('hi');
    if (obj.funds - amount >= 0) {
      obj.withdraw(amount);
    } else {
      throw 'No funds available. Current funds: ' + obj.funds;
    }
  }
  */
};

const safeCheckingAccount = new Proxy(checkingAccount, handler);


// other properties still working properly
console.log(safeCheckingAccount.owner);
safeCheckingAccount.owner = 'Debora';
console.log(safeCheckingAccount.owner);

// Checking funds attempt to change will raise an exception. Super!
console.log(safeCheckingAccount.funds);
safeCheckingAccount.funds = 10000; // this will raise error. cannot change funds 

在这里,我有一个问题。 似乎正在执行的方法是accountChecking.withdraw,当它尝试更新基金时,会触发基金属性陷阱。

safeCheckingAccount.withdraw(10000); // this is raising an error different from expected.
问题暂未有回复.您可以查看右边的相关问题.
1 如何使代理的陷阱异步?

假设我们有一个对象: 和带有“异步陷阱”的代理: 我已经在上面尝试了代码,但是没有用。 似乎Proxy无法将异步获取识别为陷阱,也不会拦截获取器。 如何解决? 要么: 是否有另一种方法可以在不更改原始对象的情况下获得对象属性的“延迟”值? ...

2 应用代理陷阱

我意识到如果我想在 Proxy 中“应用”陷阱,Proxy 的目标必须是一个函数。 我需要目标是一个对象。 我想知道目标对象是否可以有一些特殊的“属性”来“调用”而不是一个函数。 有这样的方法吗? 简单地说,出于某种原因,我需要“目标 instanceOf 函数 == 假” 编辑:我发现如何使对象 ...

3 在普通JS对象上使用`get`和`apply`代理陷阱

以下代码是一个简单的代理,用于记录被捕获的“获取”: 当我使用"hello " + p将其强制转换为String时,我在控制台中获得以下输出: 到目前为止一切都很好,但让我们做一些偷偷摸摸的事情并代理一个函数 ,但实际上仍然使用它作为我们在上一个例子中使用的普通对象的代理。 我 ...

4 javascript-实例化对象时使用代理陷阱

我想要一个可以实例化的javascript函数,并捕获正在调用它的每个未定义方法(代理陷阱)。 我到目前为止所拥有的是: 现在,如果我调用MyProxyFunction.foo() ,它将被调用(我将看到“构造函数”启动并从get函数获取日志)。 但是我想做的是像下面这样实例 ...

7 如何使用代理在每个申请上更改IP地址?

我有一个使用WebClient导航到某些外部页面的应用程序。 在此应用程序的顶部,我有一个HAProxy ,它使请求负载均衡到5个linux主机(每个主机都有一个有效的IP地址)。 它的工作。 但是问题是HAProxy仅在我关闭应用程序时才更改外部ip(客户端发送TCP重置,因此T ...

9 Javascript:在代理中陷阱“ in”运算符

我有这样的代理: 在不提供所有详细信息的情况下,将其设置为捕获整数并从相应索引处的另一个(实际)数组“ B”返回对象。 因此,例如pr [3]将返回B [3] .someProperty。 它还捕获“长度”并返回数组“ B”的长度。 但是,实际上从未将值直接直接分配给pr“数组”。 ...

10 为什么 JS 中存在代理 «apply» 陷阱?

代理看起来像一个 API,用于扩展我们操作对象的方式,例如为所有属性制作单个 getter。 有一个称为apply的代理陷阱会干扰函数调用。 根据文档,此陷阱只能与函数一起使用,因此可以使用没有代理的普通旧 JavaScript 代码实现此陷阱: // Proxy method const tra ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM