我有使用相同循环代码的乘法函数,我想知道是否可以通过使用一个循环函数来简化代码,这样我就可以通过调用所需的函数名称来执行代码。
现在:
for(var i=0;i<all;i++){ someFunction(i) }
需要:
cycle(someFunction);
function cycle(name){
for(var i=0;i<all;i++){
name(i);
}
}
我尝试使用“window”来做到这一点,我没有收到任何错误,但该功能没有执行。
var MyLines = new lineGroup();
MyLines.createLines(); // works
MyLines.addSpeed(); // doesn't work
var lineGroup = function(){
this.lAmount = 5,
this.lines = [],
this.createLines = function (){
for(var i=0,all=this.lAmount;i<all;i++){
this.lines[i] = new line();
}
},
this.addSpeed = function (){
// no error, but it's not executing addSpeed function
// if i write here a normal cycle like in createLines function
// it's working ok
this.linesCycle("addSpeed");
},
this.linesCycle = function(callFunction){
for(var i=0,all=this.lAmount;i<all;i++){
window['lineGroup.lines['+i+'].'+callFunction+'()'];
}
}
}
var line = function (){
this.addSpeed = function (){
console.log("works");
}
}
最佳答案
window['lineGroup.lines['+i+'].'+callFunction+'()'];
literally 尝试访问以 lineGroups.lines[0]
开头的属性。这样的属性只有在您明确执行 window['lineGroups.lines[0]'] = ...
时才会存在,我相信您没有这样做。
根本不需要涉及window
。只需访问对象的 line
属性:
this.lines[i][callFunction]();
i get no error but the function is not executed.
访问不存在的属性不会产生错误。示例:
window[';dghfodstf0ap9sdufgpas9df']
这会尝试访问属性 ;dghfodstf0ap9sdufgpas9df
,但由于它不存在,这将导致 undefined
。由于没有对返回值进行任何操作,因此无法观察到任何变化。
关于javascript - 使用循环函数简化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489275/