2016-12-03 180 views
1

我想覆蓋一些函數,因爲我想先加載的函數取決於用戶交互(大部分時間),我只想加載一個空的版本的函數(確保如果調用這個函數,JavaScript不會停止執行並拋出錯誤)。頁面加載後,我想加載實際的功能。如何覆蓋功能?

  1. 這是個好主意嗎?
  2. 下面的代碼是否適用於所有瀏覽器?
//for the first time 
function name(){} 
//after page loaded 
function name(){....//long function//..........} 
+2

這聽起來像typicall [XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)恕我直言... ** 1。**'這是否是好事想法?'可能不是! ** 2。**'當然,但爲什麼呢?' –

+0

@ A.Wolff我編輯了一下 – Bucky

+1

你可以隨心所欲覆蓋新功能。如果您需要填充物來吸收有限時間的通話,請執行此操作。 – 2016-12-03 13:05:50

回答

2

1.那是好主意嗎?

可能不是,但我們必須知道更多關於您實際需要做的事情;也許對於你的用例來說,這是完全正確的解決方案。或者,提供一些函數可以用來確定其邏輯的狀態信息可能更有意義。

2.下面的代碼可以在所有瀏覽器上使用嗎?

是的,它在規範中定義。如果在同一個範圍內有多個函數聲明,則最下面的一個會勝出。

另外,還可以分配給第一函數聲明創建的標識符:

//for the first time 
function name(){} 
//when the page loads 
name = function() { }; 

到這樣做的好處是,你可以做一個回調(例如,一個事件處理程序),而(當然)在事件處理函數中編寫函數聲明只是在該事件處理函數的作用域內定義函數。

+0

謝謝你的回答,這是有幫助的,我想給用例邏輯:當頁面加載的帖子將通過ajax請求加載然後like.js將加載其中包含所有類似的功能,它是穩定的,可以頁面底部有一些功能取決於案例,例如創建聊天功能 - - - 當用戶輸入網站通知腳本時會加載然後開始執行本身,它會向服務器請求,如果服務器說你有新消息它將調用create_chat函數,這是非常沉重的,我想加載頁面後加載 – Bucky

+0

- 我之前定義它,因爲我不wan t到JavaScript拋出錯誤 – Bucky

1
  1. 這是一個好主意嗎?

  • 將它在所有瀏覽器
  • 是工作。

    var func = function() {}; 
    
    window.onload = function() { 
        func = function() { 
         ...new function definition... 
        }; 
    }; 
    

    使用簡單的關閉。

    +1

    這是一個沒有足夠內容的答案,你甚至回答了什麼? :-) – andlrc

    +1

    我回答如何加載一個函數,當整個頁面加載。這不是問題嗎? –

    +1

    OP的問題是,1)這是一個好主意,2)它是否與瀏覽器兼容。問題中的代碼已經處理函數覆蓋。 – 2016-12-03 13:14:43