如何检查命名空间函数是否存在?

时间:2013-09-06 07:12:24

标签: javascript namespaces javascript-namespaces

有没有办法找出命名空间中的函数是否存在?我正在尝试获取HTML元素的属性值,然后检查字符串值是否具有相应的JavaScript函数。

<a id="myLink" href="http://stackoverflow.com/" data-success-callback="$.Namespace.SomeFunction" />

var successCallback = $('#myLink').data('success-callback');

我知道我可以使用 typeof window [callback] ==='function'来检查全局声明的函数,但这似乎不适用于命名空间中的函数;这是未定义的。

有办法解决这个问题吗?

谢谢:)

2 个答案:

答案 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