【问题标题】:How to convert dot notation to string?如何将点符号转换为字符串?
【发布时间】:2017-04-25 01:58:41
【问题描述】:

我正在寻找一种使用 Javascript 将点表示法转换为字符串的方法。基本上这就是我要找的东西:

function dotToString(dotNotation){
  return something;
}


dotToString(this.is.just.a.test);
// Would return "this.is.just.a.test"

【问题讨论】:

  • 这会引发错误.. 除非实际定义了该路径并且您不会获得对象中属性的路径。
  • 如果 thisthis.isthis.is.just 等是 undefined javascript 将抛出错误 - 否则 this.is.just.a.test 将导致某些东西(对象或原语) - 并且没有概念回溯看看我们是如何得到这个最终对象的,因为可能有多个“父母”)......简短的回答,你不能
  • 这几乎可以肯定是一个 XY 问题。你认为你需要这个的目的是什么?
  • 我正在尝试创建一个节点包,允许您以点表示法浏览文件系统。因此,最终目标是 require(dn(src.script.js)) = require("src/script.js) ,其中 dn 是一个函数;
  • 点符号用于访问对象的属性。您正试图出于 javascript 解析器不支持的目的而征用该符号。这是行不通的。

标签: javascript node.js syntax


【解决方案1】:

简短回答:否

长答案:当 javascript 将参数传递给函数时,它会传入您尝试传入的变量中的值。dotToString 函数在任何时候都不会看到 this.is.just.a.test(它会看到“blah” , 如果this.is.just.a.test = "blah")。这是不可能的。

【讨论】:

    【解决方案2】:

    是的,您可以使用代理来做到这一点。

    function makeDotProxy(name) {
      return new Proxy({}, {
        get(target, prop) {
          if (prop === 'valueOf' || prop === 'toString') return () => name;
          if (typeof prop === 'symbol') return Reflect.get(target, prop);
          return makeDotProxy(name + '.' + prop);
        }
      });
    }
    
    const This = makeDotProxy('this');
    console.log(This.is.a.just.a.test.toString());

    但是,你为什么要这样做呢?

    【讨论】:

    • 这不要求对象本身是代理吗?这不仅适用于所有开箱即用的对象。
    • 不能同时是两件事。它可以是常规对象,其工作方式类似于常规对象,也可以是特殊对象,在此使用代理实现,该代理返回点路径,但不能同时使用两者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多