如何创建具有一个可以获取对象或变量的参数的方法或函数

时间:2013-01-11 03:26:29

标签: javascript variables object parameters arguments

我想知道如何去做这件事。不确定术语是什么,所以我为此道歉。当您使用.css()方法时,我在jQuery中看到过这种行为。您可能已经知道,此方法接受以下几种选择:

您可以执行以下操作:

$("#box").css("background-color", "red");//sets the bg color to red
$("#box").css("background-color");//returns the bg color of #box
var properties = {"background-color" : "red", "width" : 100};
$("#box").css(properties); //sets multiple properties in one call with literal object.

所以,我并不担心这个功能的getter部分。我最感兴趣的是能够区分变量和文字对象。我想基于它接收的参数创建一个具有相同行为的插件。一个简单的例子是这样的:

function openWindow(URL_OR_OBJECT){
    if(variable){
    window.open(URL_OR_OBJECT);
   return; 
  }
   var opt = URL_OR_OBJECT;
   window.open(opt.url, opt.title, opt.options, opt.replace);
}

3 个答案:

答案 0 :(得分:2)

您可以使用typeof

检查参数的类型
function openWindow(parameter){
    if(typeof parameter == "string"){
        window.open(parameter);
    }
    else if(typeof parameter == "object"){
        window.open(parameter.url, parameter.title, parameter.options, parameter.replace);
    }
}

答案 1 :(得分:0)

您可以使用typeof查看参数是否为字符串。

if ( typeof URL_OR_OBJECT === "string" ) {
  window.open(URL_OR_OBJECT);
} else { /*...*/ }

你可以谨慎使用它,因为typeof new String("hello")"object"。但我不认为太多人会用这种方式声明字符串。

MDN上的

类型文档:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof

答案 2 :(得分:0)

虽然我没有特别看过源代码,但我认为它的结构类似于:

function css(bgcolor_or_obj, width, etc) {
    var bgcolor;
    if(typeof bgcolor_or_obj === 'object') {
        // Expand configuration object here.
        bgcolor = bgcolor_or_obj.bgcolor;
        width = bgcolor_or_obj.width;
        etc = bgcolor_or_obj.etc;
    } else {
        bgcolor = bgcolor_or_obj;
    }

    /* ... */
}

我知道Javascript中没有标准化的方法来区分传递给函数的参数作为变量或文字。有问题的函数更有可能是检查第一个参数是否是一个对象,如上所示。