How can I *unpack* an object into a function's scope?

前端 未结 2 1508
迷失自我
迷失自我 2021-01-19 09:05

I have this code...

function a(options) {
    for (var item in options) {
       if ( ! options.hasOwnProperty(item)) {
          continue;
       }
       t         


        
相关标签:
2条回答
  • 2021-01-19 09:35

    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 5 strict 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 ?

    0 讨论(0)
  • 2021-01-19 09:39

    You can access the function from inside itself using the callee property:

    function a(options) {
        var thiz = arguments.callee;
        for (var item in options) {
            if (!options.hasOwnProperty(item)) {
                continue;
            }
            thiz[item] = options[item];
        }
    }
    
    a({
        'abc': 'def'
    });
    
    alert(a.abc);
    

    Alternatively, you can set the scope when you call it:

    function a(options) {
        for (var item in options) {
            if (!options.hasOwnProperty(item)) {
                continue;
            }
            this[item] = options[item];
        }
    }
    
    a.call(a, {
        'abc': 'def'
    });
    alert(a.abc);
    
    0 讨论(0)
提交回复
热议问题