我想要的是加载多个文件。这些文件都使用相同的函数加载,只有文件名不同。此函数应返回一个对象。像这样:
var files = [ loadFile("file1.txt"), loadFile("file2.txt"), loadFile("file3.txt") ];
// Example function
function loadFile( file_name ) {
return "loaded file " + file_name;
}
但是当我运行它时,它会直接加载它。
var files = [ loadFile, loadFile, loadFile ];
// now please
for (var i = 0; i < files.length; i++) {
files[i]();
}
但是这样我就无法给出论据。现在我可以创建这样的填充函数,但我可能有更好的方法来做到这一点...
function loadFile1() {
return loadFile( "file1.txt" );
}
如果可能,我如何将Javascript函数作为带参数的参数加载?
*做了一些测试。我将与bind()一起寻找答案,因为这正是我所寻求的。但是我想提一下Stuart's回答我肯定会记住以备将来使用。 MoeSattler&amp; vlaz谢谢你们展示其他好方法!
答案 0 :(得分:6)
你做不到:
// Example function
function loadFile( file_name ) {
return "loaded file " + file_name;
}
var files = ["file1.txt", "file2.txt", "file3.txt"];
for (i = 0; i < files.length; i++) {
loadFile(files[i]);
}
答案 1 :(得分:3)
map
怎么样?
function loadFile( file_name ) {
return "loaded file " + file_name;
}
const fileNames = ['file1.txt', 'file2.txt', 'file3.txt']
const files = fileNames.map(loadFile)
console.log(files)
&#13;
答案 2 :(得分:2)
您可以使用Function#bind
将参数绑定到函数,然后在没有参数的情况下调用。
bind()
方法创建一个新函数,在调用时,将其this
关键字设置为提供的值,并在给定的任何参数之前提供给定的参数序列调用新函数。
function loadFile( file_name ) {
return "loaded file " + file_name;
}
var files = [ loadFile.bind(null, "file1.txt"), loadFile.bind(null, "file2.txt"), loadFile.bind(null, "file3.txt") ];
files.forEach(function (a) {
console.log(a());
});
&#13;
答案 3 :(得分:2)
选项1是使用所谓的 thunk - 它只是一个不带任何参数的函数,并在执行时返回一个值。它对于稍后返回某些内容非常有用。你确实有一个loadFile1
的例子,但你可以概括它。
function loadFileLater(fileName) {
return function() {
loadFile( fileName );
}
}
function loadFileLater(fileName) {
return loadFile.bind(null, fileName);
}
或者,您可以翻转它而不是拥有需要值的函数数组,您可以拥有一个值数组,您可以在其中执行一个函数
function loadFile( file_name ) {
return "loaded file " + file_name;
}
var filesNames = [
"file1.txt",
"file2.txt",
"file3.txt",
"file4.txt"
]
var files = filesNames.map(loadFile)
console.log(files);
答案 4 :(得分:1)
bind
将成为你最好的朋友。
通常bind
用于为函数分配上下文(即:var myBoundFunc = myFunc.bind(myObj)
将通过{{1}确保this
中对MyFunc
的任何引用将指向myBoundFunc
),但绑定还有额外的好处,即能够存储参数以调用myObj
。
所以在你的情况下:
myFunc
var files = [ loadFile.bind(this, "file1.txt"), loadFile.bind(this, "file2.txt"), loadFile.bind(this, "file3.txt") ];
可以是任何上下文,并且在调用结果函数(即this
)时使用后面的每个参数。