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