2016-02-19 67 views
1

我想檢查一下我是否可以使用以下對象中的函數。如何找出對象中是否存在聲明的函數?

我的目標代碼:

var joe = joe || {}; 

    (function(window, document, undefined) { 
     'use strict'; 

     joe.test = (function() 
     { 
     // -------------------------- 
     var testing = function() { 
       console.log("testing is here"); 
     }; 
     // -------------------------- 
     return { 
      testMe:testing 
      } 

     })(); 

    }(window, document)); 

我的跳棋:沒有人工作。

if ((window.joe == 'undefined') && (window.joe.test == 'undefined')) { 
    console.log("1:not here "); 
} else { 
    console.log("1:there "); 
} 

if ((typeof joe == "object") && (joe.test.testMe in window)) { 
    console.log("2:there"); 
} else{ 
    console.log("2:not there"); 
} 

if ((typeof joe == "object") && (joe.test.testMe == "function")) { 
    console.log("3:there"); 
} else { 
    console.log("3:not there"); 
} 

如何才能知道函數joe.test.testMe存在,但未聲明時未發生錯誤?

回答

1

CSS技巧做了這個here

他們使用::

if (typeof yourFunctionName == 'function') { 
    yourFunctionName(); 
} 

如果它存在的函數,那麼它會運行一個小文章。如果它不存在typeof var回報'undefined'

if(typeof joe.test.testMe == 'function') { 
    joe.test.testMe(); 
} 

您的支票應該是::

if ((typeof window.joe == 'undefined') && (typeof window.joe.test == 'undefined')) { 
    console.log("1:not here "); 
} else { 
    console.log("1:there "); 

    if ((typeof joe == "object")) { 
     console.log("2:there"); 

     if ((joe.test.testMe == "function")) { 
      console.log("3:there"); 
     } else { 
      console.log("3:not there"); 
     } 
    } else{ 
     console.log("2:not there"); 
    } 
} 
+0

THX的回答:如果我刪除了喬對象,我會收到以下錯誤:的ReferenceError:喬沒有定義。那就是我想避免的。 – hamburger

+0

我不認爲我完全理解這一說法。但是你確實需要在每個語句之前使用'typeof'。我會把它放在我的答案中來展示它應該如何看待。 –

相關問題