javascript - 如何使用Javascript检查函数是否存在于另一个函数中
问题描述
我正在尝试构建一个按需加载脚本的函数。那是我当前的代码:
function loadScript(src, name = null)
{
var dfd = jQuery.Deferred();
if (name === null) {
name = src.split(/\\|\//); // split by folder separator
name = name[(name.length - 1)].split('.'); // catch last index & split by extension
name.splice(name.length - 1, 1) // Remove last
name = name.join('.'); // add points in the middle of file name
}
if ( typeof name === 'function' ) return dfd.promise().resolve(name);
$.getScript( src )
.done(function( script, textStatus ) {
dfd.resolve(name);
})
.fail(function( jqxhr, settings, exception ) {
dfd.reject(exception);
});
return dfd.promise();
}
我的问题出在这部分代码上:
if ( typeof name === 'function' ) return dfd.promise().resolve(name);
其中 name 是一个变量,其中包含要检查的所需函数名称,但不是真正的函数名称,导致函数永远不会评估为“函数”。
我试过了:
typeof `${name}` // resulting a "string"
eval("typeof name === 'function'") // But my node system not accept eval due to a potentially security risk
我有多少选择?
解决方案
又快又脏:
if ( typeof name === 'string' && typeof eval(name) === 'function' ) return dfd.promise().resolve(name);
因为您可能想在将其传递给 eval 之前仔细检查该名称实际上是 a。如果它来自用户输入,您可能还想进一步验证它,因为您可能会打开自己的脚本注入。
推荐阅读
- php - OOP PHP 未定义变量
- java - 如何查询事件驱动数据库表中所有对象的当前状态?
- javascript - Internet Explorer 11 计算时区错误
- java - Spock 存根在功能方法中不起作用
- angular - 除非填写表格,否则角度保持在同一页面上
- javascript - 如何将参数传递给 JavaScript 中的 compose 函数中的每个函数
- c# - 如何根据操纵杆旋转来旋转我的飞机?
- networking - MutlicastSocket 接收并不总是
- ios - CollectionView 单元崩溃 - 断言失败
- python - 为什么 list.__repr__ 不使用 list.__getitem__?