Open joe-sky opened 6 years ago
因为get被用作返回一个新的proxy对象(避免undefined),所以只能用apply来处理返回值,如果是函数可以写两个括号。 :P
嗯了解了。不过我觉得如果能够实现正常用属性的方式访问变量,这样这个库使用起来会更容易,现有代码的迁移成本也会更少,还是比较期待能够实现。
不知道实现难度是多大,我脑洞一下理想情况能不能这样实现:
obj.rock
的时候返回的这个proxy对象,使它的取值方式保持和music.rock
一致obj.rock.band
,再去判断rock
的值是否为null
其实nj
模板在取对象属性时也实现了这种安全访问的机制,大概思路和上面写的差不多。不过nj
是字符串语法糖,它的实现原理可以不受原生语法限制而更加自由;用js原生支持的方式实现也可能会更有难度。
确实有迁移成本的问题,也确实由于proxy的限制导致了现在的实现方式。要想达到和原生对象访问同样的语法,估计还是要靠语言本身来支持。 ps:实际上tc39中已经有了类似特性(Optional Chaining),目前处在stage1阶段,可以通过babel来使用。但还是要在语句上加个问号......
如下代码中:
不太明白这里取
band
属性时为什么要用函数调用的方式?这样如果band
是个函数变量,是不是就无法正常执行了。