可能的重复:
如果 Javascript 拥有一流的功能,为什么它不起作用呢? https://stackoverflow.com/questions/8773579/if-javascript-has-first-class-functions-why-doesnt-this-work
当我尝试为以下对象创建别名函数时document.getElementById
如下:
f = document.getElementById;
但是,当我尝试打电话时:
var e_fullname = f(“fullname”);
出现了一个错误:Could not convert JavaScript argument
下面就可以了:
var e_fullname = f.call(document, “funname”);
你能告诉我为什么吗?
调用函数有四种方式:
- 函数调用:
f(p1, p2)
- 方法调用:
obj.f(p1, p2)
- 应用或调用调用:
f.apply(obj, [p1, p2])
, f.call(obj, p1, p2)
- 构造函数调用:
new f(p1, p2)
在所有这些情况下,f
只是一个函数对象的引用(指针)(一个带有[[Call]]
内部属性)。在所有这些情况下,函数的调用方式使其表现不同,这一点非常重要。
So, f
只是一个参考getElementById
对象,之间没有区别document.getElementById
and someOtherHTMLElement.getElementById
;该函数不会保留对引用它的对象的引用。
如果你想绑定某个"owner"对象,使用bind
method:
var f = document.getElementById.bind(document);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)