JavaScript 代理:将字符串参数代理到 console.log() 的简单日志函数 代理设计模式可以解决哪些问题?

问题描述

我是 JavaScript 的新手,现在已经学习了一周。我申请了不同公司的实习机会,昨天接到电话面试。他们问了我一些问题,对于这个特定的问题,我一无所知。有人可以为我提供解决方案或帮助我澄清这个代理主题

这个问题的答案是什么?

请编写一个简单的日志函数,将字符串参数代理到 console.log() *

解决方法

如果我被问到这个问题,我会理解“这将代理一个字符串”意味着“将传递一个字符串......以受控方式” .维基百科写到 Proxy pattern

代理设计模式可以解决哪些问题?

  • 应该控制对对象的访问。
  • 访问对象时应提供其他功能。

因此,在这种情况下,您将验证参数是字符串,或者另一种解释可能是您将非字符串转换为字符串,然后再将其传递给 console.log。所以我认为以下两个答案都可以:

function log(str) {
    if (typeof str !== "string") throw new TypeError("log should not be called with a non-string");
    console.log(str);
}

log("hello");

或者:

function log(str) {
    if (typeof str !== "string") str = JSON.stringify(str);
    console.log(str);
}

log(["an","array"]);

,

**

function log(){
    console.log(...arguments);
}
log("a","b")

**