SORU
14 HAZİRAN 2010, PAZARTESİ


Jslint hata 'Don't bir döngü içinde işlevleri yapmak nasıl.'

JS kodumuzu tüm jslint, bazen verdiği bir sürü geçmesi seçenekleri ile eski kod düzgün daha sonra düzeltme niyetiyle şimdi için pass almak için yapmaya çalışıyorum.

Jslint için bir workround yok yakınıyor hakkında bir şey var. Bu gibi yapıları kullanarak, hata 'bir döngü içinde fonksiyonlar yapmayın. gittiğimizde.

        for (prop in newObject) {
        // Check if we're overwriting an existing function
        if (typeof newObject[prop] === "function" && typeof _super[prop] === "function" &&
        fnTest.test(newObject[prop])) {
            prototype[prop] = (function (name, func) {
                return function () {
                    var result, old_super;

                    old_super = this._super;
                    this._super = _super[name];
                    result = func.apply(this, arguments);
                    this._super = old_super;

                    return result;
                };
            })(prop, newObject[prop]);
        }

Bu döngü mevcut sınıfları genişleten sınıflar genişletilmiş sınıfının bir üyesi başlatırken genişletilmiş sınıf süper özelliği muhafaza klasik miras JS bir uygulama parçasıdır. Sadece netleştirmek için, bu uygulama yukarıda John Resig tarafından blog post Bu esinlenmiştir.

Ama biz de işlevleri bir döngü içerisinde oluşturulan başka örnekleri var.

Tek geçici çözüm şu ana kadar jslint bu JS dosyaları dışlamak için, ama sürekli bizim bütünleşmenin bir parçası olarak kod doğrulama ve sözdizimi denetimi için jslint kullanımı ve iş akışı inşa etmek istiyoruz.

Bu işlevi uygulamak için daha iyi bir yolu var ya jslint ile bu gibi bir kod çimdik için bir yolu var mı?

CEVAP
14 HAZİRAN 2010, PAZARTESİ


Douglas Crockford yukarıdaki ulaşmanın yeni deyimsel bir yolu vardır - onun eski teknik değişkenleri bağlamak için bir iç fonksiyonu kullanmak için, ama yeni bir teknik fonksiyon makinesi kullanır. slide 74 in the slides to his "Function the Ultimate" talk bkz.

Tembel için, burada kodu:

function make_handler(div_id) {
    return function () {
        alert(div_id);
    };
}
for (i ...) {
    div_id = divs[i].id;
    divs[i].onclick = make_handler(div_id);
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Epic Tutorials for iPhone, iPad and iOS

    Epic Tutoria

    18 EYLÜL 2011
  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • Matt Harding

    Matt Harding

    23 Mayıs 2006