Javascript 获取对象引用和函数名
如何从objectReference[“functionName”]形式的输入检索对包含函数的对象的引用 例如:Javascript 获取对象引用和函数名,javascript,function,object,Javascript,Function,Object,如何从objectReference[“functionName”]形式的输入检索对包含函数的对象的引用 例如: function aaa(param) { var objectReference = /*..???...*/; var functionName = /*...???..*/; // Now expected result is that objectReference contains // a reference to myObject, a
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"]);
谢谢你你不能做你列出的任何一件事。这里有两件不同的事情:
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]();
}
另一种选择是,如果您不需要对象引用(除了进行调用),则使用函数#bind
:
aaa(myObject["myFunction"].bind(myObject));
aaa
将收到一个函数引用,调用该函数时,将使用此
引用myObject
调用原始函数。因此,aaa
实际上无法获取对象引用,但它仍然可以进行调用。您不能执行列出的任何一项操作。这里有两件不同的事情:
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]();
}
另一种选择是,如果您不需要对象引用(除了进行调用),则使用函数#bind
:
aaa(myObject["myFunction"].bind(myObject));
aaa
将收到一个函数引用,调用该函数时,将使用此
引用myObject
调用原始函数。因此,aaa
实际上无法获取对象引用,但它仍然可以进行调用。您的问题不太清楚,请进一步详细说明您的问题不太清楚,请进一步详细说明谢谢,我希望通过传递一个参数来获得此结果,但不可能很清楚。@Andrea:可以是一个参数,但它必须是两条信息。我添加了一个使用对象的示例,因此它是一个参数,以防有用。谢谢,我希望通过传递一个参数就可以得到这个结果,但这不太可能。@Andrea:它可以是一个参数,但必须是两条信息。我添加了一个使用对象的示例,因此它是一个参数,以防有用。