2017-01-16 4 views
2

gulp-uglifyを使用し、DOM要素(jQueryを使用)をキャッシュする場合、uglifyは$(this)のうち$(void 0)を作成します。

$(document).on("click", "sth",() => { 
    var $this = $(this); 
    ... 
}); 

は、このになります:

$(document).on("click", "sth", function() { 
    var e = $(void 0); 
    ... 
}); 

私はこれを防ぐにはどうすればよいですか?

+0

これは[mcve]ではありません。麻薬業務に問題がある場合は、麻薬業務を投稿してください。私たちはおそらくそれがどのように見えるか推測できません。 'gulp-uglify'は矢印関数を扱うことができないので、' babel'や 'UglifyJS2'を使っていますが、知る方法はありません。 –

答えて

1

アロー機能do not bind this

矢印機能は、独自のこのコンテキストを作成しませんが、そうthisが囲んでいる文脈からその本来の意味を持っています。

つまり、thisは、周囲の範囲のthisを指します。あなたの矢印関数は別の関数の中にないので、thisは、グローバルthisを指します。

ブラウザではグローバルthisrefers to the window objectです。しかし、私はあなたがプリセットでbabelを使用していると推測しています。この場合、babelyour code is inside an ES6 moduleと仮定します。 ES6モジュールの内部では、thisの値はundefinedです。あなたは可能な限り上記の行を圧縮しようとするuglify()を、持っている

var $this = $(undefined); 

次のアップ:このコードに

var $this = $(this); 

babel()このコードをtranspileことを意味します

var e = $(void 0); 

あなたがこれをどのように修正すればよい。この目的のために、void 0 evaluates to undefinedvoid 0ので、あなたはこれで終わるundefinedよりも短くなっているという事実を利用しますか?簡単です。矢印機能を使用しないでください:

$(document).on("click", "sth", function() { 
    var $this = $(this); 
    ... 
}); 
関連する問題