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>
当我们执行上述代码时,它将生成由网页上显示的文本组成的输出。

