2011-06-07 19 views
2

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

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

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

我明白evercookie旨在成为一个构造函数(尽管没有跟随资本构造的约定)我的理解是evercookie被设置为匿名,自执行函数的返回。除非我比我想象的更困惑,evercookie应该设置为_class的值在外部(匿名)函数的范围内。什么我如下:_class哪里得到一个值? _classthis._class不同,并且没有其他参考_class

+0

我觉得this._class几乎是一样的VAR _class。创建一个名为_class的本地变量。就像window.test与测试 – Gerben 2011-06-07 18:08:52

回答

2

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

这里的基本思想是:http://jsfiddle.net/hYQab/

+0

Ooh一样。好。奇怪,但。有没有什么好的理由可以这样写呢?我是否正确地理解你所说的和他一直写_class或this._class完全一样,并且以这种方式编写它的唯一附加效果是默默无闻的? – 2011-06-07 18:13:49

+0

我打赌他不完全明白他在那里做什么。 – Robert 2011-06-07 18:14:42

+0

鉴于是谁写的,我会更倾向于打赌,他只是因为纯粹的缺点而抛出一些非常模糊的东西。 – 2011-06-07 18:15:37