I have this code...
function a(options) {
for (var item in options) {
if ( ! options.hasOwnProperty(item)) {
continue;
}
this[item] = options[item];
}
}
a({ 'abc': 'def' });
Whilst this unpacks variables from the object, it sets them to global scope (attached to window
) because this
is window
in that circumstance.
So after the function I can do alert(abc)
and it will alert def
, which isn't good.
How would I set the scope of the variables to the function?
You can access the function from inside itself using the callee property:
Alternatively, you can set the scope when you call it:
If you want to put the properties of the object in the scope of the function, you can extend the scope by using
with
:Disclaimer: Make sure you read the documentation and about disadvantages of
with
. It should be avoided and is also kind of deprecated:So the questions is why not stick with
options
?