SORU
22 Mayıs 2009, Cuma


Nasıl onları eninde sonunda idam edilmek için sıraya javascript fonksiyonları saklamak mı

Javascript Sıra bir sınıf oluşturdum ve bir sıra veri olarak fonksiyonları saklamak istiyorum. Bu şekilde talepler (çağrı işlevi) kurmak ve gerektiğinde onlara cevap verebilirim (aslında işlevini çalıştırmadan).

Veri bir işlev olarak biraz benzer saklamak için herhangi bir yolu yoktur

.setTimeout("doSomething()", 1000);

olurdu hariç

functionQueue.enqueue(doSomething());

Bir şey saklamak istiyorsunuz() sıradan veri almak zaman, yani veri olarak işlev çalıştırılır.

Ben tahmin ediyorum ki var bir şey() tırnak ->"bir şey yapıyorsun()" ve bazı nasıl olun arama işlevini kullanarak bir dize, herkes biliyor nasıl yapılabilir?

CEVAP
22 Mayıs 2009, Cuma


Tüm fonksiyonlar aslında oldukça kolay bir dizi (() olmadan onları başvurarak): tüm fonksiyonları saklamak için yani aslında değişken

// Create your functions, in a variety of manners...
// (The second method is preferable, but I show the first for reference.)
function fun1() { alert("Message 1"); };
var fun2 = function() { alert("Message 2"); };

// Create an array and append your functions to them
var funqueue = [];
funqueue.push(fun1);
funqueue.push(fun2);

// Remove and execute the first function on the queue
(funqueue.shift())();

Eğer bu fonksiyonlara parametre geçirmek istiyorsanız biraz daha karmaşık hale gelir, ama kolay her zaman bundan sonra olduğunda bu çerçeve Kur. Yapacaksın aslında, çağrıldığında, özellikle bağlam ve parametre bir dizi önceden tanımlanmış bir işlevi patlar olan kapsayıcı bir işlev oluşturun

// Function wrapping code.
// fn - reference to function.
// context - what you want "this" to be.
// params - array of parameters to pass to function.
var wrapFunction = function(fn, context, params) {
    return function() {
        fn.apply(context, params);
    };
}

Sarma için faydalı bir işlevi var, ve bu işlevlerin gelecekte çağırmaları oluşturmak için kullanılan nasıl bakalım:

// Create my function to be wrapped
var sayStuff = function(str) {
    alert(str);
}

// Wrap the function.  Make sure that the params are an array.
var fun1 = wrapFunction(sayStuff, this, ["Hello, world!"]);
var fun2 = wrapFunction(sayStuff, this, ["Goodbye, cruel world!"]);

// Create an array and append your functions to them
var funqueue = [];
funqueue.push(fun1);
funqueue.push(fun2);

// Remove and execute all items in the array
while (funqueue.length > 0) {
    (funqueue.shift())();   
}

Bu kod sarıcı ya bir dizi ya da argümanlar (ama bunu yapmak için çalışıyorum örneği karışıklık olur) bir dizi kullanmak için izin vererek geliştirilebilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrew_Huang

    Andrew_Huang

    10 ŞUBAT 2006
  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006
  • mahalodotcom

    mahalodotcom

    8 HAZİRAN 2007