And*_*rea 0 javascript function object
如何从 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"]);
Run Code Online (Sandbox Code Playgroud)
谢谢
你不能做你列出的任何一件事情。这里有两件事:
获取myObject价值
获取该对象用于引用该函数的属性的名称
传入aaa代码中的值只是对该函数的引用。对对象的引用不会传递给aaa,也没有关于对象用来引用函数的属性的任何信息。两者都不能从函数引用本身推断或导出。(函数可能有一个name,在现代 JavaScript 引擎上可以通过它的name属性访问它,但这可能与对象用来引用它的属性的名称不同。)
为此,您必须将它们分别作为离散参数传递:
aaa(myObject, "myFunction");
Run Code Online (Sandbox Code Playgroud)
或作为对象
aaa({obj: myObject, prop: "myFunction"});
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,aaa可能看起来像
function aaa(info) {
// Use info.obj and info.prop here
// The call would be
info.obj[info.prop]();
}
Run Code Online (Sandbox Code Playgroud)
另一种选择,如果你真的不需要对象引用,除了进行调用的目的,是使用Function#bind:
aaa(myObject["myFunction"].bind(myObject));
Run Code Online (Sandbox Code Playgroud)
aaa将收到一个函数引用,当被调用时,将通过this引用调用原始函数myObject。所以aaa实际上并不能得到对象引用,但它仍然可以进行调用。