9 ms·
Something along the lines of this: function myFunction() { var a, b, func; func = function () { return { attrA: function (attr) {
by bzalasky 11y ago
Something along the lines of this:
function myFunction() {
var a, b, func;
func = function () {
return {
attrA: function (attr) {
a = attr;
return this;
},
attrB: function (attr) {
b = attr;
return this;
},
toString: function () {
console.log([a, b].join(' '));
return this;
}
}
}
return func();
}
This allows us to call myFunction multiple times, set attributes (imagine it were createPerson instead, with a name, age, etc...) and not run into problems with state being shared.
I like this question because it covers closures, this, objects and functions. It also doesn't qualify as a brain teaser, IMO.
- fragmede 11y ago> It also doesn't qualify as a brain teaser, IMO. That's debatable. It requires a piece of unusual thinking ('return this'), and a bit of magic (knowing about the 'this' magic variable), but once you've seen it, the answer's obvious, and it's pretty easy to replicate everywhere.
- bzalasky 11y agoUnderstanding 'this' is foundational when it comes to understanding JavaScript, IMO. So, I don't think it's that unusual. Out of curiosity, what's another question that demonstrates a solid understanding of JavaScript as a language?
- fragmede 11y agoYeah, but returning 'this' to let you chain things like that? Definitely a trick. Not as obscure as Duff's device, but a trick, nonetheless.