I have this code...
function a(options) {
for (var item in options) {
if ( ! options.hasOwnProperty(item)) {
continue;
}
this[item] = options[item];
}
}
a({ 'abc': 'def' });
jsFiddle.
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?
If you want to put the properties of the object in the scope of the function, you can extend the scope by using with
:
function a(options) {
with(options) {
// properties of `options` are in the scope
alert(abc);
}
}
Disclaimer: Make sure you read the documentation and about disadvantages of with
. It should be avoided and is also kind of deprecated:
Using
with
is not recommended, and is forbidden in ECMAScript 5strict
mode. The recommended alternative is to assign the object whose properties you want to access to a temporary variable.
So the questions is why not stick with options
?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With