gpt4 book ai didi

javascript - 检查字符串变量名称是否是对象的 JavaScript 函数

转载 作者:行者123 更新时间:2023-11-28 18:31:37 24 4
gpt4 key购买 nike

如何检查函数中传递的字符串参数是否太可调用/函数但不能直接在window.下。

我知道可以使用语法 window['functionName']

检查打开/直接调用的函数

但是要检查的对象内部声明的成员函数又如何呢?

在下面的例子中,可以调用openFunction(),但是如何调用obj1.foo()

Prefer not to use eval()

示例代码:

var obj1 = {
foo: function() {
alert("I'm a function");
}
}

function openFunction() {
alert("I know i am easily callable");
}

function callSomeone(txtcallback) {
var fn = window[txtcallback];
if (typeof fn === 'function') {
fn();
}
console.log(typeof fn);
}

callSomeone('openFunction'); //function
callSomeone('obj1.foo'); //undefined

最佳答案

它返回undefined,因为您的代码相当于window["obj1.foo"],这是不正确的。

访问foo函数的正确方法是window["obj1"]["foo"]

所以你必须“循环”字符串obj1.foo

这里我添加了一个 GetProp 函数来执行该循环并且是递归的,因此嵌套级别不是问题。

var obj1 = {
foo: function() {
alert("I'm a function");
}
}

function openFunction() {
alert("I know i am easily callable");
}

function callSomeone(txtcallback) {
var fn = GetProp(window, txtcallback.split("."));
if (typeof fn === 'function') {
fn();
}
console.log(typeof fn);
}

function GetProp(obj, props) {
if(props.length == 0) {
return obj;
} else if(obj[props[0]] != undefined) {
obj = obj[props[0]];
return GetProp(obj, props.slice(1));
}
}

callSomeone('openFunction'); //function
callSomeone('obj1.foo'); //undefined

关于javascript - 检查字符串变量名称是否是对象的 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37876460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com