如何从objectReference [" functionName"]形式的输入中检索包含函数的对象的引用。
示例:
function aaa(param) {
var objectReference = /*..???...*/;
var functionName = /*...???..*/;
// Now expected result is that objectReference contains
// a reference to myObject, and functionName contains a
// string with name of function (implemented in myObject),
// so I can invoke it with objectReference[functionName]()
// after some manipulation.
}
var myObject = new SomeFunction();
aaa(myObject["myFunction"]);
谢谢
答案 0 :(得分:4)
你不能做你列出的任何事情。这里有两个不同的东西:
获取myObject
值
获取该对象用于引用函数的属性的名称
代码中传递给aaa
的值只是对函数的引用。对象的引用不会传递到aaa
,也不会传递有关该对象用于引用该函数的属性的任何信息。既不能推断也不能从函数引用本身派生出来。 (该函数可能有一个名称,它可以在现代JavaScript引擎上通过其name
属性进行访问,但这可能与该对象用于引用的属性的名称不同它。)
为了做到这一点,你必须单独传递它们,或者作为离散参数:
aaa(myObject, "myFunction");
或作为对象
aaa({obj: myObject, prop: "myFunction"});
在后一种情况下,aaa
可能看起来像
function aaa(info) {
// Use info.obj and info.prop here
// The call would be
info.obj[info.prop]();
}
另一个选项是,如果除了打电话之外你真的不需要对象引用,那就是使用Function#bind
:
aaa(myObject["myFunction"].bind(myObject));
aaa
会收到一个函数引用,当被调用时,将使用引用this
的{{1}}来调用原始函数。所以myObject
实际上无法获得对象引用,但它仍然可以进行调用。