javascript - Douglas Crockford says we should use that=this. So why do some JS developers disagree? -
if watch enough douglas crockford videos on youtube, you'll see outer this stuff like
var = this; $('p').each(function(){ that._textpieces.push($(this).text()); }); which why same. yet know js developers consider shoddy , instead use bind , other ways use more language features , yet make code more unreadable because reader has go more work figure out this means in exact context in used.
first off: several commenters have noted, it's preferred use .bind() in es5 , arrow functions in es6.
there once dark age before .bind(), evidenced the compatibility table @ bottom of mdn page; crockford of age. can see .bind() polyfill (also on mdn page), rolling own completely standards-correct .bind() non-trivial compared simple var = this; - it's not unreasonable latter.
of course, i'm not crockford, have no idea thought process way when :)
with in mind, trick come in handy on occasion. example, d3 has selection.each() function, called each element in selection element bound this. var = this; in outer scope here allows me access both element , outer scope this:
var = this; d3.selectall('circle.foo') .each(function(d, i) { var circle = d3.select(this); var position = that.computeposition(circle); circle .attr('cx', position.x) .attr('cy', position.y); }); (this particular example cribbed code didn't want call computeposition() twice, there enough circle.foo dom nodes profiling had shown computeposition() bottleneck. can imagine similar scenarios in jquery , other such dom manipulation libraries.)
personally, call that bit more visually distinct this (e.g. context, outercontext, outerthis, etc.) minimize confusion.
Comments
Post a Comment