2011-07-06 13 views
8

zdefiniowałem globalną funkcję javascript:Jak niezdefiniować lub usunąć funkcję javascript?

function resizeDashBoardGridTable(gridID){ 
    var table = document.getElementById('treegrid_'+gridID); 
     ..... 
    } 

Po tej funkcji został użyty kilka razy, chcę usunąć (lub nieokreślony) tej funkcji, ponieważ kod Procedura powinna nazywać się ponownie. jeśli ktoś spróbuje nazwać tę metodę, nie musimy nic robić.

Nie zmieniam teraz tej funkcji.

więc ponownie zdefiniowana funkcja ta może być jednym ze sposobów:

function resizeDashBoardGridTable(gridID){ 
     empty,do nothing 
    } 

Dzięki. lepszy sposób?

+1

"Kod procedury powinien zostać wywołany ponownie" Co to znaczy? – lonesomeday

+1

Po prostu wykonaj: 'resizeDashBoardGridTable = function() {}' – Cipi

+0

Spróbuj, jeśli to działa?Wywołanie funkcji JS: 'eval ('function resizeDashBoardGridTable (gridID) {;}')' Nie "nie definiuje" tego, ale powoduje, że nie robi nic. – Angad

Odpowiedz

5

Jak korzystać z var?

// define it 
var myFunction = function(a,b,c){ 
    console.log('Version one: ' + [a,b,c].join(',')); 
} 
myFunction('foo','bar','foobar'); // output: Version one: foo,bar,foobar 

// remove it 
myFunction = null; 
try { myFunction(); console.log('myFunction exists'); } 
catch (e) { console.log('myFunction does not exist'); } 

// re-define it 
myFunction = function(d,e,f){ 
    console.log('Version two: ' + [d,e,f].join(',')); 
} 
myFunction('foo','bar','foobar'); // output: Version two: foo,bar,foobar 

WYJŚCIE:

[10:43:24.437] Version one: foo,bar,foobar 
[10:43:24.439] myFunction does not exist 
[10:43:24.440] Version two: foo,bar,foobar 
+0

Dzięki, nie wiem, zmienić tę funkcję, zmiana to przyniesie pewne ryzyko. – Jammy

+0

@Jammy: Właśnie zwracałem uwagę, że jako zmienna masz pełną kontrolę. Alternatywnie możesz użyć 'okna. '(jeśli zdefiniowano globalnie) podobnie jak wspomniany jcolebrand i robi to w ten sposób. –

+0

@Jammy: Przedefiniowanie go tak, jak sugeruje @Brad * nie * zmienia trochę rzeczy, masz rację, by zachować ostrożność. W szczególności zmienia się *, gdy * ta funkcja zostaje początkowo zdefiniowana (po wejściu do zasięgu globalnego, tak jak w kodzie, lub później, gdy krok po kroku realizacja kodu dotrze do przypisania, w kodzie Brada). Wiele czasu to nie ma znaczenia, ale to jest w porządku, nie ma potrzeby zmiany definicji, możesz wciąż zdefiniować symbol tak, jak deklarujesz funkcję. –

6

bo jesteś deklarując ją globalnie, jest dołączony do obiektu window, więc po prostu trzeba przedefiniować funkcję okna o tej nazwie.

window.resizeDashBoardGridTable = function() { 
    return false; 
} 

Alternatywnie można zdefiniować ją do dowolnej innej wartości lub nawet na null, jeśli chciał, ale przynajmniej poprzez utrzymanie jej funkcji, może nadal być „o nazwie” bez uszczerbku.

Oto live example przedefiniowania funkcji. (dzięki TJ)

Dodatkowym powodem dla wskazania, że ​​jestem na nowo definiowany na obiekcie okna jest na przykład, jeśli masz inny obiekt, który ma tę funkcję jako jeden, jeśli jego członkowie, możesz zdefiniować go na Użytkownik w ten sam sposób:

var myObject = {}; 
myObject.myFunction = function(passed){ doSomething(passed); } 
/// 
/// many lines of code later after using myObject.myFunction(values) 
/// 
/// or defined in some other function _on_ myObject 
/// 
myObject.myFunction = function(passed){} 

to działa tak samo, czy inaczej, czy to na obiekcie okna lub innego obiektu.

+1

Dodałem przykład na żywo, tylko dla jasności. –

+0

@ T.J.Crowder - Wiem, że minęło kilka lat, ale niestety, przykład JSBin (http://jsbin.com/imejob) został usunięty (wygasł). –

3

Najprostszym podejściem jest ustawienie funkcji (traktuj ją jako zmienną) na wartość null. Działa to nawet wtedy, gdy nie zadeklarujesz go jako var. Zweryfikowano to na IE.

resizeDashBoardGridTable = null 
0

Jeśli funkcje musi być nazywany 1 raz użyć anonimową funkcję samo wywoływanie takiego:

(function test(){ 
    console.log('yay i'm anonymous'); 
})(); 

Jeśli trzeba wywołać funkcję wielokrotnie go przechowywać w var i ustawić to po null kiedy skończysz.

Uwaga: Nie musisz nadawać nazwy anonimowej funkcji, tak jak nazwałem ją testem. Możesz go również użyć w następujący sposób:

(function(){ 
    console.log('test'); 
})(); 

Powód, dla którego nadaję moje anonimowe funkcje, zapewnia dodatkową czytelność.

Powiązane problemy