簡體   English   中英

如何檢查命名空間是否存在?

[英]How to check if a namespaced function exists?

有沒有辦法找出名稱空間中的函數是否存在? 我正在嘗試獲取HTML元素的屬性值,然后檢查字符串值是否具有相應的JavaScript函數。

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

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

我知道我可以使用typeof window [callback] ==='function'來檢查全局聲明的函數,但這似乎不適用於名稱空間中的函數; 它是未定義的。

有辦法解決嗎?

謝謝 :)

假設回調是您的successCallback對象,它執行window [callback] ==='function'只會檢查窗口對象的根是否有一個名為'$ .Namespace.SomeFunction '的對象。 但是,您要實現的是檢查$對象中包含的對象名稱空間本身中是否存在名為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'

我改用這個:

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;
}

在這里得到它: 通過字符串名稱訪問命名空間的javascript對象,而無需使用eval

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM