JavaScript Handler getPrototypeOf() 方法
在 JavaScript 中,代理对象可以使用 handler.getPrototypeOf() 拦截对 Object.getPrototypeOf() 的调用。它允许自定义原型检索行为。当访问对象的原型时,将调用处理程序 getPrototypeOf()。这可以动态控制原型访问,从而实现虚拟化和封装等功能。如果处理程序未定义 getPrototypeOf(),则将执行默认原型查找。此方法对于包含继承和对象组合等功能至关重要。
语法
以下是 JavaScript 处理程序 getPrototypeOf() 方法的语法 -
new Proxy(obj, {
getPrototypeOf(target) {
//
}
});
参数
- target − 保存目标对象。
返回值
此方法返回一个对象,如果没有返回对象,则返回 null。
示例 1
让我们看下面的示例,我们将使用 handler.getPrototypeOf() 来检索代理对象的原型。
<html>
<style>
body {
font-family: verdana;
color: #DE3163;
}
</style>
<body>
<script>
const x = {};
const y = {
getPrototypeOf(target) {
return Object.getPrototypeOf(target);
}
};
const z = new Proxy(x, y);
document.write(y.getPrototypeOf(z) === Object.getPrototypeOf(z));
</script>
</body>
</html>
输出
如果我们执行上述程序,它将在网页上显示一段文本。
示例 2
考虑另一种场景,我们将阻止对目标对象原型的访问。
<html>
<style>
body {
font-family: verdana;
color: #DE3163;
}
</style>
<body>
<script>
const x = {};
const y = {
getPrototypeOf: function(target) {
return null;
}
};
const z = new Proxy(x, y);
document.write(Object.getPrototypeOf(z));
</script>
</body>
</html>
输出
执行上述脚本后,网页上将显示空文本。
示例 3
在下面的示例中,我们将使用 handler.getPrototypeOf() 动态地将代理对象的原型调整为 Array.prototype。
<html>
<style>
body {
font-family: verdana;
color: #DE3163;
}
</style>
<body>
<script>
const x = {};
const y = {
getPrototypeOf(target) {
return Array.prototype;
}
};
const z = new Proxy(x, y);
document.write(y.getPrototypeOf(z) === Array.prototype);
</script>
</body>
</html>
当我们执行上述代码时,它将生成由网页上显示的文本组成的输出。

