【问题标题】:Javascript: Passing a special argumentJavascript:传递一个特殊的参数
【发布时间】:2012-05-06 10:10:36
【问题描述】:

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

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

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

meow(left);

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

meow(height);

【问题讨论】:

    标签: javascript arguments


    【解决方案1】:

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

    我只是想给你一些建议,看看你最喜欢哪一个。

    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"];
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 作为解释:func.call,其中func 是一个函数,在func 的持续时间内将this 的值作为第一个参数。
      【解决方案3】:

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

      试试这个:

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

      修改它以满足您的需要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 2017-10-31
        相关资源
        最近更新 更多