2011-07-06 28 views
8

Küresel bir Javascript işlevi tanımladım: Tanımlanmamış veya javascript işlevini nasıl kaldırabilirim?

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

Bu işlev birkaç kez kullanıldıktan sonra, Prosedür kodu tekrar çağrılması gerektiğinden bu işlevi kaldırmak (veya tanımlanmamış) yapmak istiyorum. Birisi bu yöntemi çağırmaya çalışırsa, hiçbir şey yapmamalıyız.

Şu an bu işlevi değiştirmiyorum.

bu yüzden yeniden tanımlanmış bu fonksiyon bir yol olabilir:

 function resizeDashBoardGridTable(gridID){ 
     empty,do nothing 
    } 

Teşekkürler. daha iyi bir yol?

+1

"Prosedür kodu tekrar çağrılmalıdır" Bu ne anlama geliyor? – lonesomeday

+1

Sadece yap: 'resizeDashBoardGridTable = işlev() {}' – Cipi

+0

Bunun işe yarayıp yaramadığını deneyin.JS işlevini çağırın: 'eval ('işlev resizeDashBoardGridTable (gridID) {;}')' Bu 'undefine' değil ama hiçbir şey yapmaz. – Angad

cevap

5

nasıl bir var kullanmaya ne dersiniz?

// 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 

ÇIKIŞ: Eğer küresel deklare Çünkü sadece o isimde pencere işlevini yeniden tanımlamak gerekir böylece

[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

Teşekkürler, bu işlevi değiştirdiğimi bilmiyorum, biraz risk getirecektir. – Jammy

+0

@Jammy: Sadece bir değişken olarak tam kontrole sahip olduğunuzu işaret ediyordum. Alternatif olarak, pencereyi kullanabilirsiniz. '(global olarak tanımlanmışsa), jcolebrand'ın bahsettiği gibi ve bu şekilde de yapsın. –

+0

@Jammy: @Brad, bir şeyleri biraz değiştirdiğini ileri sürerek, yeniden düşünmeye karar verdiğinizi hatırlatıyor. Spesifik olarak, * başlangıçta fonksiyon tanımlandığında * değişir (kodunuzda olduğu gibi, global kapsama girdikten sonra veya daha sonra kodun adım adım yürütülmesi, Brad'in kodunda atamaya ulaştığında). Önemli değil pek çok zaman, ama sorun değil, tanımınızı değiştirmeye gerek yok, yine de sembolü bildirme şeklinizi yeniden tanımlayabilirsiniz. –

6

, bu window nesneye bağlı.

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

Alternatif başka bir değere yeniden tanımlamak olabilir veya isterseniz hatta null, ama en azından bunu bir işlev tutarak, hala hiçbir zarar ile "denilen" olabilir.

İşte fonksiyonunu yeniden tanımlanması bir live example bu. (teşekkürler)

Pencere nesnesinde yeniden tanımladığımı belirtmek için ek bir neden, örneğin, üyesi olarak bu işlevi olan başka bir nesneye sahipseniz, bunu aynı şekilde üye:

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){} 

o pencere nesnesinin veya başka bir nesne üzerinde olsun, aynı her iki şekilde çalışır.

+1

Sadece açıklık için canlı bir örnek ekledim. –

+0

@ T.J.Crowder - Birkaç yıl olduğunu biliyorum ama ne yazık ki JSBin örneği (http://jsbin.com/imejob) kaldırıldı (süresi doldu). –

3

basit yaklaşım null (bir değişken olarak tedavi) işlevini ayarlamaktır. Bu, bir var olarak bildirmezseniz bile çalışır. Bunu IE'de doğruladı.

resizeDashBoardGridTable = null 
0

fonksiyonları böyle bir anonim kendini çağıran işlevini kullanın 1 kez denilen gerekiyorsa: Bir var ve set içine saklayın fonksiyonu birden çok kez çağırmak varsa

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

İşiniz bittiğinde null'a.

Not: Ben testi olarak adlandırdı gibi anonim bir işlevi isim yok. Ayrıca bu gibi kullanabilirsiniz:

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

benim anonim fonksiyonlarını adlandırmak yapmamızın nedeni ekstra okunabilirliği içindir.

İlgili konular