2011-06-07 55 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