【问题标题】:Trying to understand a code construct in evercookie试图理解evercookie中的代码结构
【发布时间】:2011-09-10 07:11:45
【问题描述】:

我一直试图理解 Samy Kamkar 的 evercookie 代码,他至少做了一件我根本不理解的事情。相关代码可以在线查看http://code.google.com/p/beef/source/browse/trunk/modules/beefjs/lib/evercookie.js?spec=svn604&r=604

我的问题是关于此代码如何设置 evercookie 本身。相关结构:

var evercookie = (function () {
  this._class = function() { 
      ... 
  }; 
  return _class;
})();

我了解evercookie 旨在成为构造函数(尽管不遵循大写构造函数的约定)并且我了解evercookie 被设置为匿名、自执行函数的返回。除非我比我想象的更困惑,否则evercookie 应该设置为_class 在外部(匿名)函数范围内的值。我遵循的是:_class 在哪里获得价值? _classthis._class 不是一回事,也没有其他对_class 的引用。

【问题讨论】:

  • 我认为 this._class 和 var _class 差不多。创建一个名为 _class 的局部变量。就像 window.test 和 test 一样

标签: javascript function scope anonymous-function


【解决方案1】:

在该函数中_classthis._class 相同,因为this 引用了自动执行函数中的窗口对象。它本质上是让_class 函数成为一个全局变量。

基本思路如下:http://jsfiddle.net/hYQab/

【讨论】:

  • 哦。好的。不过很奇怪。有什么好的理由这样写吗?我是否理解正确,您所说的这与他一直写 _class 或 this._class 完全一样,而且这样写的唯一额外效果是晦涩难懂?
  • 我敢打赌,他并不完全明白他在那里做什么。
  • 鉴于谁写的,我更倾向于打赌他只是出于纯粹的矛盾而投入了一些非常模糊的东西。
  • 我并不是说他是个白痴,但可能只是错过了它,因为它在技术上确实有效,即使它不是最佳实践。我有时会创建一串变量,例如var one = 1, two = 2; three = 3;,而错过了two 之后的分号,这使得three 成为全局变量。除非万不得已,否则将事情全球化并不是一个好主意。
  • 作为免责声明,我不熟悉他的项目,并且基于您上面的问题,他可能有这样做的正当理由,鉴于有限的背景,我可能无法理解。如果你相信他知道他在做什么,我不会改变它,只要注意如果它们被全局化,你可以覆盖内部。
猜你喜欢
  • 2014-07-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
相关资源
最近更新 更多