Javascript:传递一个特殊的参数

时间:2012-05-06 10:10:37

标签: javascript arguments

我记得遇到过这个问题的解决方案..如果我没有错,这种类型的论证有一个特殊的术语。但我不能完全记住它是什么。我尝试在网上搜索它但无济于事。所以它来了:

我想传递一个由函数组成的参数。我该怎么办?

function meow(cat){
    var z = $("#nyan").position().cat;
    alert(z);
}

meow(left);

function meow(cat){
    var z = $("#nyan").cat();
    alert(z);
}

meow(height);

3 个答案:

答案 0 :(得分:0)

这不是一个功能;它看起来更像是你想要一个属性的名称。

我只想向你提出一些建议,看看你最喜欢哪一个。

function meow(cat) {
    var z = $("#nyan").position()[cat];
    alert(z);
}

meow("left");

......或......

function meow(cat) {
    var z = $("#nyan")[cat]();
    alert(z);
}

meow("height");

......或者,真正使用函数:

function meow(getter) {
    var z = getter($("#nyan"));
    alert(z);
}

meow(function(nyan) { return nyan.position().left });
meow(function(nyan) { return nyan.position().top });
// etc.

修改:最重要的是a.b等同于a["b"] - 请注意后者中的引号。

如果a.x widthtrue a.y,如果widthfalse,那么,如果您需要var result = a[width ? "x" : "y"]; ,例如:

{{1}}

答案 1 :(得分:0)

您可以使用call来调用作为参数传递的函数:

function meow(cat) {
    var z = cat.call($("#nyan"));
    alert(z);
}

meow($.fn.height);

答案 2 :(得分:0)

给定的解决方案将起作用,但如果您希望该函数同时接受属性/属性和函数,它们将无法工作。

试试这个:

function meow(cat){
  var z = typeof cat == 'function' ? $("#nyan").[z]() : $("#nyan")[z];
  alert(z);
}

meow(left);

修改此项以满足您的需求。