有没有办法找出命名空间中的函数是否存在?我正在尝试获取HTML元素的属性值,然后检查字符串值是否具有相应的JavaScript函数。
<a id="myLink" href="http://stackoverflow.com/" data-success-callback="$.Namespace.SomeFunction" />
var successCallback = $('#myLink').data('success-callback');
我知道我可以使用 typeof window [callback] ==='function'来检查全局声明的函数,但这似乎不适用于命名空间中的函数;这是未定义的。
有办法解决这个问题吗?
谢谢:)
答案 0 :(得分:1)
假设回调是你的successCallback对象做窗口[callback] ==='function'将只检查窗口对象的根处是否有一个名为'$ .Namespace.SomeFunction 的对象。但是你想要实现的是检查$ object中包含的对象Namespace中是否存在名为SomeFunction的对象。
要这样做,你可以使用@rps写的名为typeof typeof myNamespace.myFunc,如果你已经知道命名空间和函数,或者使用下面的函数来遍历一个对象并查找给定的路径,在你的情况下$ .Namespace.SomeFunction:
var get = function (model, path, def) {
path = path || '';
model = model || {};
def = typeof def === 'undefined' ? '' : def;
var parts = path.split('.');
if (parts.length > 1 && typeof model[parts[0]] === 'object') {
return get(model[parts[0]], parts.splice(1).join('.'), def);
} else {
return model[parts[0]] || def;
}
}
现在做类似
的事情typeof get(window, '$.Namespace.SomeFunction', 'undefined') === 'function'
答案 1 :(得分:0)
我改为使用了这个:
function getProperty(objName) {
var parts = objName.split('.');
for (var i = 0, length = parts.length, obj = window; i < length; ++i) {
obj = obj[parts[i]];
}
return obj;
}
点击此处:Access namespaced javascript object by string name without using eval