Javascript 如何通过变量调用函数?
我有下面的代码Javascript 如何通过变量调用函数?,javascript,Javascript,我有下面的代码 function MyFunc(){} var myFunc = new MyFunc(); myFunc(); // through TypeError this line, 如果要通过变量调用函数,如何使其工作?大小写不匹配。Javascript区分大小写。在Javascript中,函数只是另一个变量 function MyFunc(){} 与 var MyFunc = function(){}; 因此,这也是正确的 function MyFunc(){} var m
function MyFunc(){}
var myFunc = new MyFunc();
myFunc(); // through TypeError this line,
如果要通过变量调用函数,如何使其工作?大小写不匹配。Javascript区分大小写。在Javascript中,函数只是另一个变量
function MyFunc(){}
与
var MyFunc = function(){};
因此,这也是正确的
function MyFunc(){}
var myfunc = MyFunc;
myfunc();
通过执行newmyfunc()
,您将MyFunc
视为一个构造函数,并使用它创建一个对象。这将MyFunc
视为一个您想要作为其实例的类。您只需要指定另一个变量来指向函数,因此不需要新的或()
您只需设置var myFunc=myFunc
,然后调用myFunc()
就可以了。您创建了函数的对象,新关键字用于创建对象
var myfun_var = function MyFunc(){
alert("hello");
}
and call myfun_var();
因此,调用new MyFunc()
将执行您在其中输入的任何代码-它的行为有点像其他语言中的构造函数-尽管不完全一样
如果不是输入错误,并且您想在类上定义一个名为myFunc的函数
MyFunc.prototype.myFunc = function() {
}
我想你想要的是:
var myFunc = function(){
....
};
myFunc();
这将创建一个名为myFunc
的变量,该变量是对匿名函数的引用。
在JavaScript中,函数是一级对象。要引用对象,只需使用函数名。因此,如果您只想通过MyFunc
变量调用MyFunc
,只需将MyFunc
赋值给MyFunc
:
function MyFunc(){}
var myFunc = MyFunc; // <=== Change on this line
myFunc();
…将MyFunc
作为构造函数调用,并且MyFunc
(变量)将收到对作为结果创建的任何对象的引用。(就像,比如说,var now=new Date();
创建一个Date
对象并将其分配给now
)你是说myFunc,我想通过变量myFunc调用函数,而不是直接调用myFunc。“…与…”不,不是。第一个是函数声明,第二个是函数表达式,两者之间有很大的区别。它们在语法上在不同的地方有效,它们在不同的时间被处理,并且它们对它们所在的范围有不同的影响。因此,您能否进一步解释一下var myFunc=myFunc()
,这一行创建了什么对象?它执行函数myFunc()
并将函数的返回结果分配给myFunc
变量,就像var el=document.getElementById(“header”)
会。@jfriend00,但MyFunc()的函数中没有return语句,这是否意味着MyFunc将接收空指针?@Thomson:您的意思是var MyFunc=new MyFunc()代码>?通过new
调用函数时,JavaScript引擎会创建一个空白对象,从MyFunc.prototype
分配其原型,然后使用this
集调用MyFunc
,以引用新对象。在正常过程中,MyFunc
将使用this
初始化某些属性,而new
表达式的结果将是创建的对象。(有可能是MyFunc
导致新对象被丢弃,并使new
表达式的结果引用另一个对象,但这既高级又不同寻常。)@Thomson:IfMyFunc
不返回值,只要调用它(x=MyFunc();
),x
将接收未定义的(非null
)。如果您通过new
(x=new MyFunc();
)调用它,x
将收到对new
创建的对象的引用(请参见上面我的重叠注释)。
function MyFunc(){}
var myFunc = MyFunc; // <=== Change on this line
myFunc();
var myFunc = new MyFunc();