【问题标题】:Making the keys of an object passed as argument as local function variables将对象的键作为参数作为局部函数变量传递
【发布时间】:2013-01-02 01:48:21
【问题描述】:

我有一个可以传递对象的函数。然后我需要这个对象中的所有变量成为局部变量。比如

function ping(){
    alert(riff); //'raff'
}

ping({
    riff: 'raff'
});

我能想到的唯一方法是循环对象并逐个设置它们,但这似乎很笨拙。有其他选择吗?

编辑:返回是显示该变量会是什么样子。我不想要的主要事情是必须通过另一个对象来获取数据。我希望结构是

 function.riff = 'raff' 

而不是

 function.settings.riff = 'raff'

【问题讨论】:

  • 这就是原则,这被认为是一种很好的做法。所以,使用它,它并不笨重(在 JS 中)。

标签: jquery function scope arguments


【解决方案1】:
function ping(){
    for(var key in arguments[0]){
        this[key] = arguments[0][key];
    }
}

这是目前我能想到的最好的答案……这方面有什么进展吗?

注意如何将变量直接添加到函数中,而不是通过函数中的对象。

这是因为我希望能够在使用该对象之前覆盖私有函数变量。

【讨论】:

    【解决方案2】:

    使用$.extendhttp://api.jquery.com/jQuery.extend/

    function ping(options){
        var defaults = { riff : "foo raff" };
        /* merge defaults and options  */
        var settings = $.extend({}, defaults, options);
    
        console.log(settings.riff); // "raff"
    }
    
    ping({
        riff: "raff"
    });
    

    JsBin 示例:http://jsbin.com/utinuc/1/edit

    【讨论】:

    • 我不想将变量存储在另一个对象中。我正在更改一个现成的函数,它们都直接从函数分支。
    【解决方案3】:

    简单地做

    function ping(obj){
        return obj.riff;
    }
    

    function ping(obj){
        var riff = obj.riff;
    
        return riff;
    }
    

    【讨论】:

    • 啊...所有变量,那么 Fabrizios 的答案更好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2023-03-24
    • 2018-02-23
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多