gpt4 book ai didi

javascript将点符号字符串转换为对象

转载 作者:搜寻专家 更新时间:2023-10-31 23:31:04 24 4
gpt4 key购买 nike

我有一个像这样的字符串 "namespace.fun1.fun2.fun3" 从客户端传递过来。它告诉服务器要使用哪个函数。

如何安全地运行函数?

现在我在做:

var runthis = string.split('.')
namespace[runthis[1]][runthis[2]][runthis[3]]

如何安全地处理任意深度的嵌套?

最佳答案

我写的一个小函数。我在我的大部分应用程序中都使用它:

Object.lookup = (function _lookup() {
var cache = { };

return function _lookupClosure( lookup, failGracefully ) {
var check = null,
chain = [ ],
lastkey = '';

if( typeof lookup === 'string' ) {
if( cache[ lookup ] ) {
chain = cache[ lookup ].chain;
check = cache[ lookup ].check;
}
else {
lookup.split( /\./ ).forEach(function _forEach( key, index, arr ) {
if( check ) {
if( typeof check === 'object' ) {
if( key in check ) {
chain.push( check = check[ key ] );
lastkey = key;
}
else {
if( !failGracefully ) {
throw new TypeError( 'cannot resolve "' + key + '" in ' + lastkey );
}
}
}
else {
if( !failGracefully ) {
throw new TypeError( '"' + check + '" ' + ' does not seem to be an object' );
}
}
}
else {
lastkey = key;
chain.push( check = window[ key ] );
}
});

if( check ) {
cache[ lookup ] = {
chain: chain,
check: check
};
}
}
}

return {
execute: function _execute() {
return typeof check === 'function' ? check.apply( chain[chain.length - 2], arguments ) : null;
},
get: function _get() {
return check;
}
};
}
}());

用法:

Object.lookup( 'namespace.fun1.fun2.fun3' ).execute();

第一个参数是要解析的对象/方法/属性。第二个(可选)参数指示如果某些属性或对象无法解析,lookup() 方法是否应静默失败或抛出异常。默认为“抛出”。为了避免那个电话

Object.lookup( 'namespace.fun1.fun2.fun3', true ).execute( 'with', 'paras' );

如果 .fun3 是一个函数,您可以将任何参数传递给 .execute()。如果你只想接收属性值,你也可以调用 .get() 而不是 .execute()

var val = Object.lookup( 'namespace.fun1.fun2.fun3' ).get();

关于javascript将点符号字符串转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6704737/

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