从另一个函数调用函数-Javascript API
我是javascript新手,我有一个无法解决的问题 开始时,我有以下代码,并且工作得很好从另一个函数调用函数-Javascript API,javascript,api-design,Javascript,Api Design,我是javascript新手,我有一个无法解决的问题 开始时,我有以下代码,并且工作得很好 函数foo(){ var load_b=新数组(); 加载_b=b(); } 函数a(){ var files=document.getElementById(“图像”).files; 归还文件; } 函数b(){ var get_a=a.call(get_a); 返回get_a; }试试这个: var a = function() { return document.getElementByI
函数foo(){
var load_b=新数组();
加载_b=b();
}
函数a(){
var files=document.getElementById(“图像”).files;
归还文件;
}
函数b(){
var get_a=a.call(get_a);
返回get_a;
}
试试这个:
var a = function() {
return document.getElementById("images").files;;
};
var b = function() {
return a() || [];
};
var foo = function() {
var load_b = b();
};
如果要继续使用现有代码,必须更改行
var get_a=a()
tovar get_a=this.a()代码>
这样做的原因是您希望指定所引用的函数a
在父对象的范围内。在不使用this
的情况下,默认情况下,JavaScript会在当前函数作用域中查找它,这意味着它试图在b
函数中找到a()
函数,b:function(){…}
注意:我稍微清理了一下代码,并用测试数组['1','2','3']
替换了document.getElementById(“images”).files
,以便此代码在小提琴设置中运行。您可以取消注释,稍后再更改该行
function foo() {
var new_api = new my_api();
var load_b = new_api.b();
alert(load_b); // I added this here so this code outputs in a fiddle
}
var my_api = function() {
return {
a : function() {
var files = ['1', '2', '3']; //document.getElementById("images").files;
return files;
},
b : function() {
var get_a = this.a();
return get_a;
}
}
}
foo(); // I added this here so this code executes in a fiddle
您需要使用this
告诉脚本在当前范围内查找函数,而不是全局查找:
var get_a = this.a();
其次,这种语法有点多余:
a : function a() {
你不需要第二次提到“a”:
将起作用。您的对象定义有点不正确。以下是应该如何做到这一点:
函数foo(){
var new_api=new my_api();
var load_b=new_api.b();
控制台日志(加载);
}
var my_api=函数(){
this.a=函数(){
返回“thefiles”;//document.getElementById(“images”).files;
};
this.b=函数(){
返回此.a();//使用此.a确保访问本地a
};
//返回a和b都设置为函数的对象:
归还这个;
}
foo()
您必须学会使用this
对象来访问这些函数-它们不是全局声明的,因此窗口[a]
的标准查找会导致未定义的
。执行此操作时,您可能希望查看JS中的class
delcaration,而不是从函数返回匿名对象。同样也要研究原型,因为这样你每次都在创建一个新的函数引用,而使用原型你只做一次(顺便说一句,类只是更奇特的原型)。这不是OP所说的问题——这一点是有效的。您回答了问题的一部分,这不是一个问题。仅供参考,使用命名函数声明实际上很有用,即使它是一个副本-它将在您检查元素时显示(我有一些东西每帧调用函数,很高兴看到列为myFunctionName(){}的函数数组
即使它什么也不做。有助于调试,但仅此而已:)
a : function() {