从函数

时间:2016-09-22 22:11:17

标签: javascript function return

我试图拨打从function返回的function。这就是我的意思:

myFunction.something; // (Wrong)
function myFunction() {
    return {
        something: function() {
            ...
        }
    };
}

当我尝试拨打myFunction.something时,没有任何反应。如何在函数之外调用返回的函数?

JSFiddle



var index = 0;
var animID = requestAnimationFrame(myFunction.something);

function myFunction() {
  return {
    something: function() {
      index++;
      console.log(index);
      if (index === 5) cancelAnimationFrame(animID);
      else animID = requestAnimationFrame(myFunction.something);
    }
  };
}




4 个答案:

答案 0 :(得分:1)

myfunction不是您通过调用myfunction()获得的对象,它是函数本身,并且没有.something方法。

你可以再次调用它(如在myfunction().something()中),但更好的方法是存储对你已经创建的对象的引用:

function myFunction() {
  var index = 0;
  var o = {
    something: function() {
      index++;
      console.log(index);
      if (index < 5) requestAnimationFrame(o.something);
      // btw you don't need to cancel anything once you reach 5, it's enough to continue not
    }
  };
  return o;
}

myFunction().something();

或者你可能想要完全放弃这个功能,或者使用模块模式(带有IIFE),因为你似乎还是像单身一样使用它。

答案 1 :(得分:1)

我首先建议使用描述性变量名称;例如utils而不是myFunctionincrementFrame而不是something。我首先建议重新考虑你的代码组织方法,简单地将所有辅助函数直接放在一个对象中,然后引用该对象:

var index = 0;
var animID = requestAnimationFrame(utils.incrementFrame);

var utils = {
  incrementFrame: function() {
    index++;
    console.log(index);
    if (index === 5) cancelAnimationFrame(animID);
    else animID = requestAnimationFrame(utils.incrementFrame);
  }
}

这些方法之间存在一些差异,其中一些令人沮丧地微妙。我建议使用对象进行组织而不是返回对象的函数的主要原因是因为您不需要使用函数进行组织;你不必要地使你的代码复杂化。

答案 2 :(得分:0)

试试这个:

myFunction().something()
  • myFunction()调用myFunction函数
  • 他们我们在返回值(这是一个对象)上使用点表示法来查找它的something成员
  • 该成员也是一个函数,因此添加另一组括号()来调用它

答案 3 :(得分:0)

写完后调用函数

&#13;
&#13;
var index = 0;

function myFunction() {
  return {
    something: function() {
      index++;
      console.log(index);
      if (index === 5) cancelAnimationFrame(animID);
      else animID = requestAnimationFrame(myFunction().something);
    }
  };
}

var animID = requestAnimationFrame(myFunction().something);
&#13;
&#13;
&#13;