2017-04-25 80 views
0

我正在寻找一种方法来将点符号中的内容转换为使用Javascript的字符串。基本上这里就是我要找:如何将点符号转换为字符串?

function dotToString(dotNotation){ 
    return something; 
} 


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

这将抛出一个错误..除非该路径实际上已定义,并且您不会获取对象中属性的路径。 – epascarello

+0

如果'this'或'this.is'或'this.is.just'等是'undefined',javascript会抛出错误 - 否则'原始的) - 并且没有回溯的概念来查看我们如何得到这个最终对象,因为可能有多个“父母”)...简短的回答,你不能 –

+2

这几乎肯定是一个XY问题。你认为你需要这个的目的是什么? – Amadan

回答

5

简短的回答:没有

龙答:JavaScript时传递一个参数传递给函数,它通过从你正试图在传递变量的值。 dotToString函数从来没有看到this.is.just.a.test(它会看到“blah”,如果是this.is.just.a.test = "blah")。这不可能。

1

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

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());

但是,你为什么要?

+0

这不需要对象本身是一个代理吗?这不仅适用于所有开箱即用的对象 – FrankerZ

+0

它不能一次成为两件事,它既可以是一个普通对象,就像普通对象一样工作,也可以是一个特殊对象,这里使用代理来实现,该代理返回点路径,但不是两者。 – 2017-04-26 05:05:54