Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取对象引用和函数名_Javascript_Function_Object - Fatal编程技术网

Javascript 获取对象引用和函数名

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

如何从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"]);

谢谢你

你不能做你列出的任何一件事。这里有两件不同的事情:

  • 获取
    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:它可以是一个参数,但必须是两条信息。我添加了一个使用对象的示例,因此它是一个参数,以防有用。