我试图拨打从function
返回的function
。这就是我的意思:
myFunction.something; // (Wrong)
function myFunction() {
return {
something: function() {
...
}
};
}
当我尝试拨打myFunction.something
时,没有任何反应。如何在函数之外调用返回的函数?
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);
}
};
}

答案 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
而不是myFunction
和incrementFrame
而不是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)
写完后调用函数
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;