【问题标题】:Difference between "foo.bar" and "foo['bar']" in jsjs中“foo.bar”和“foo['bar']”的区别
【发布时间】:2016-04-11 07:07:22
【问题描述】:

我必须理解我在新工作中获得的代码库。我可以在这里看到很多反模式,其中一个是“上帝对象”,它包含很多东西,并且不同的对象一直在访问它。这是一个不同的问题,我的问题是关于这样一个事实,一些对象使用'.'访问其成员,其他对象通过 [] 来访问,例如

GOD.meow.woof()

在一个源文件中和

GOD['meow']["woof"]()

在另一个。

我对 javascript 的了解已经足够深入,可以意识到这没有任何区别。或者有吗? git blame 告诉我这两个来源都是由同一个人写的,所以它与风格无关。一方面,你对一个不惜一切代价创造神物的人有什么期望,另一方面,也许他很忙,最终没有时间偿还这笔技术债务,我们永远不会知道。

是否有可能使用后一种访问方法更安全?在我启动我的内部重构忍者之前,欢迎各位提出意见。

【问题讨论】:

  • 一个常见的原因:有一个缩小器(例如 google 闭包)需要第二种形式才能知道它必须保留“meow”和“woof”名称。
  • 使用方括号表示法,您可以拥有以编程方式动态生成的属性名称,并且您可以在属性名称中使用特殊字符,而 .符号。
  • @shal,如果你这样做,这个问题没有任何意义。没有任何区别?我强烈不同意...提供的链接回答了所有问题..另请阅读thisthis
  • @DenysSéguret 你的答案似乎是这样!那些使用括号访问器的部分 - 实际上通过了缩小器!您能否将其添加为不是评论,而是作为问题的答案?谢谢!

标签: javascript refactoring anti-patterns


【解决方案1】:

一个常见的原因:有一个 minifier 需要第二种形式才能知道它必须保留 "meow""woof" 名称。 Google Closure 特别方便。

除此之外,没有其他原因,正如您在文档中看到的那样(使用特殊字符和动态字符串不适用于您的情况)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多