高度なオプションを使用して、Closure Compiler で縮小しようとしている製品コードがあります。このコードは、Paul のクライアント側 Cookie ライブラリを使用しています。コンパイラは、次の 30 を超える警告を生成します。
JSC_USED_GLOBAL_THIS: dangerous use of the global this object
以下は、Paul のライブラリからのコード スニペットです (元のコードでは、無名関数ではなく、名前付き関数を使用しています)。
var cookieObject = function (name, expires, accessPath) {
var i, j
this.name = name
this.fieldSeparator = "#"
// this.found = false
this['found'] = false; // don't allow Closure-Compiler to rename
this.expires = expires
this.accessPath = accessPath
this.rawValue = ""
this.fields = new Array()
this.fieldnames = new Array()
if (arguments.length > 3) { // field name(s) specified
j = 0
for (i = 3; i < arguments.length; i++) {
this.fieldnames[j] = arguments[i]
j++
}
this.fields.length = this.fieldnames.length
}
this.read = ucRead // function assignments
this.write = ucWrite
this.remove = ucDelete
this.get = ucFieldGet
this.put = ucFieldPut
this.namepos = ucNamePos
this.read()
}; // cookieObject
uc関数は通常、次のように構成されます。
var ucRead = function () {
var search = this.name + "="
var CookieString = document.cookie
this.rawValue = null
this.found = false
}
「this」キーワードは JavaScript オブジェクト リテラル内でどのように機能しますか?を読みました。同様にClosure Compiler グローバルな「this」オブジェクトの危険な使用について警告しますか? およびJavaScript の Scope。this
ただし、上記のコードのスコープが何であるか、コンパイラの警告を排除するためにこのコードを書き直す方法はまだわかりません。
Q1: 誰かが私のためにスコープが何であるかを明確にすることができますかthis
?
Q2: 上記を書き直してコンパイラの警告をなくす方法を示すコード スニペットを提供してもらえますか (の使用をthis
なくす必要があると思います)。
ティア。