JavaScript Handler set() 方法



JavaScript 中的 handler.set() 方法用于构建一个代理对象,允许设置对象属性。当在代理对象上设置属性时,会使用目标对象、属性键和新值作为参数调用 handler.set() 方法。然后,handler.set() 方法可以执行任何必要的逻辑,例如在允许在目标对象上设置属性之前验证新值。此方法可用于自定义对象行为,使其可用于实现数据验证、访问控制等功能。

语法

以下是 JavaScript handler.set() 方法的语法:

new Proxy(target, {
   set(target, property, value, receiver) {}
});

参数

  • target − 包含目标对象。
  • property − 包含要设置的属性的名称或符号。
  • value − 要设置的属性的新值。
  • receiver − 包含最初将赋值定向到的对象。

返回值

此方法返回一个布尔值。

示例 1

让我们来看下面的例子,我们将拦截对象的属性并记录正在设置的属性值。

<html>
<style>
body {
   font-family: verdana;
   color: #DE3163;
}
</style>
<body>
<script>
const x = {
   set(target, property, value) {
      document.write(`${value}`);
      target[property] = value;
      return true;
   },
};
const y = new Proxy({}, x);
y.car = 'POLO GT';
</script>
</body>
</html>

输出

如果我们执行上面的程序,它将在网页上显示文本。

示例 2

考虑另一种情况,我们将阻止添加属性。

<html>
<style>
body {
   font-family: verdana;
   color: #DE3163;
}
</style>
<body>
<script>
const a = {};
const b = {
   set(target, property, value) {
      if (property === 'x') {
         document.write(`Setting ${property}: ` + " < br > ");
         target[property] = value;
         return true;
      }
      document.write(`Setting ${property}:` + " < br > ");
      return false;
   }
};
const c = new Proxy(a, b);
c.x = 11;
document.write(c.x + " < br > "); 
c.y = 22; document.write(c.y);
</script>
</body>
</html>

输出

执行上述脚本后,它将在网页上显示文本。

示例 3

在下面的例子中,我们将验证正在设置的值是否为正数。

<html>
<style>
body {
   font-family: verdana;
   color: #DE3163;
}
</style>
<body>
<script>
const a = {};
const b = {
   set(target, property, value) {
      if (typeof value === 'number' && value > 0) {
         document.write(`Setting Value for ${property}:` + " < br > ");
         target[property] = value;
         return true;
      }
      document.write(`Setting Value for ${property}:` + " < br > ");
      return false;
   }
};
const c = new Proxy(a, b);
c.x = 'Welcome';
document.write(c.x + " < br > "); 
c.y = 123; document.write(c.y);
</script>
</body>
</html>

当我们执行上述代码时,它将生成一个包含在网页上显示的文本的输出。

广告
© . All rights reserved.