在面试中,我被问到任何字符串,例如当执行下面的代码行时,应该控制"Hello".

console.log(new X())

这应该在不需要任何额外的console.log语句的情况下实现.

我try 了一些类似的方法:

function X() {   return "Hello"; }

但它没有返回字符串.它返回新创建的X的实例.

这是刁钻的问题吗?

推荐答案

TL;DR;

function X() {
   return document.createTextNode("Hello");
}
console.log(new X()); //"Hello"

解释:

一个直接的 idea 是以某种方式使用toString,但它不起作用.记录实现toString的普通对象或类时,当您记录它时仍会输出对象 struct ,因此这将不起作用.

规范的两个部分是解决这个问题的关键:

(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new)

当使用new关键字调用函数时,该函数将用作构造函数.New将执行以下操作:

...

  1. 如果构造函数返回非原语,则此返回值将成为整个新表达式的结果.否则,如果构造函数不返回任何内容或返回原语,则返回newInstance.

您几乎无法控制如何记录用户定义的类.但是可能有一个内置的对象将记录文本,所以我们需要计算出that可能是多少,然后在构造函数中返回它.什么内置对象记录文本?

(https://console.spec.whatwg.org/)

§1.1.6.日志(log)(...日期)

执行Logger("log",data).

§2.1.记录器(logLevel,args)

记录器操作接受日志(log)级别和其他参数列表.它的主要yields 是implementation-defined side effect of printing the result to the console.

第2.3节.打印机(logLevel,args[,options])

打印机操作由实现定义.它接受指示严重性的日志(log)级别,要打印的参数列表...出现在ARG中的元素将是以下内容之一:

  • 任何类型的JavaScript对象.
  • 特定于实现的可打印内容的表示形式,如堆栈跟踪或组.
  • 应用了通用JavaScript对象格式或optimally useful formatting的对象.

§2.3.3.常见对象格式

通常情况下,对象将以适合其上下文的格式打印...具有通用JavaScript对象格式的对象是通用JavaScript对象的潜在可扩展表示形式.An object with optimally useful formatting is an implementation-specific, potentially-interactive representation of an object judged to be maximally useful and informative.

^^泥土.我们需要找到一个具有"最佳有用格式"的对象,而不是对象树.我找不到一个详尽的 list ,但让我们考虑一下.我马上就知道,记录DOM node 会记录html树,而不是对象树:

console.log(document.body);

因此,我跳过一步,猜测记录文本 node 可能只是记录文本,并且它是有效的:

console.log text node

那里它是

function X() {
   return document.createTextNode("Hello");
}
console.log(new X()); //"Hello"

class X {
    constructor() {
        return document.createTextNode("Hello");
    }
}
console.log(new X()); // "Hello"

另请参阅:

Javascript相关问答推荐

序列查找器功能应用默认值而不是读取响应

使用AJX发送表单后,$_Post看起来为空

materialized - activeIndex返回-1

从mat—country—select获取整个Country数组

当运行d3示例代码时,没有显示任何内容

你怎么看啦啦队的回应?

为什么按钮会随浮动属性一起移动?

当Redux提供程序访问Reduxstore 时,可以安全地从Redux提供程序外部调用钩子?

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

如何使用TypeScrip设置唯一属性?

同一类的所有div';S的模式窗口

如何使用JS创建一个明暗功能按钮?

如何限制显示在分页中的可见页面的数量

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

使用CEPRESS截取时,cy.Wait()在等待5000ms的第一个路由请求时超时

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?

计算对象数组中属性的滚动增量

AstroJS混合模式服务器终结点返回404

对象作为react 子对象无效(已找到:具有键的对象{type,props}).如果要呈现一个子级集合,请改用数组