SORU
7 Mayıs 2010, Cuma


Tamir Internet Explorer (adres bilgisi, dosyalarda grup, vb.)Dizi fonksiyonları JavaScript

Ayrıntılı elsewhere başka ve görünüşte iyi bilinen, Internet Explorer (kesinlikle sürüm 7, ve bazı durumlarda, sürüm 8) uygulamak temel işlevler, belirli Array (forEach, indexOf, vb.).

Geçici çözümler burada ve orada vardır, ama bizim siteye uygulamaları doğru, kurallı bir set kat yerine kopyalayın ve ya uzakta kendi uygulamamıza yapıştırın kesmek istiyorum. Umut verici görünüyor, ama başka bir kütüphane daha geliyor olup olmadığını görmek için burada çok tavsiye edilen yazı dedim ki js-methods, buldum. Çeşitli kriterleri bir çift vardır:

  • Kütüphane sadece bir tarayıcı zaten (js-methods oldukça başarılı görünüyor) uygulamaları olan bir operasyon bu işlevleri olmalıdır.
  • OlmayanGPL, LGPL kabul edilebilir olsa da lütfen.

CEVAP
7 Mayıs 2010, Cuma


Birçok kullanım MDC geri dönüş uygulamaları (örn. indexOf). Genellikle titizlikle standartlara uyumlu olduklarını bile açıkça tüm bağımsız değişken türleri kontrol ölçüde.

Önemsiz gibi yazarlar bu kodu ilgili olduğu açıktır ne yazık ki buna rağmen ve serbestçe kullanılabilir, lisans-hibe açıkça yazılı olarak koymak için görünmüyor. Bir bütün olarak wiki eğer bu kabul edilebilir bir lisans varsa Attribution-ShareAlike CC, CC gibi bir kod için tasarlanmamış olsa da).

js-yöntemleri genel olarak iyi görünüyor, ama işlevleri (örn. olması gerekiyordu nasıl kenarlarındaki standartlarla uyumlu değil tanımsız liste öğeleri listesi mutasyona işlevleri). İşte tam da diğer rasgele standart olmayan yöntemler de dahil olmak üzere bazı şüpheli olanlar gibi tehlikeli stripTags ve eksik UTF-8 Kodek (ayrıca biraz gereksiz verilen unescape(encodeURIComponent) hile).

Buna değer ne için, ben kullanmak ne olursa copyrightable olmak söylenebilir eğer bu vesile ile kamu malı haline bırakın. Biraz daha kısa MAŞ sürümleri gibi değil girişiminde türü-kokla o işi yapmadın aptalca bir şey gibi geçip işlev olmayan geri aramaları veya tamsayı olmayan dizinler, ama dışında bu girişimleri için standartlarla uyumlu. (Eğer bir şey özledim Eğer bana bildirin. ;-))

'use strict';

// Add ECMA262-5 method binding if not supported natively
//
if (!('bind' in Function.prototype)) {
    Function.prototype.bind= function(owner) {
        var that= this;
        if (arguments.length<=1) {
            return function() {
                return that.apply(owner, arguments);
            };
        } else {
            var args= Array.prototype.slice.call(arguments, 1);
            return function() {
                return that.apply(owner, arguments.length===0? args : args.concat(Array.prototype.slice.call(arguments)));
            };
        }
    };
}

// Add ECMA262-5 string trim if not supported natively
//
if (!('trim' in String.prototype)) {
    String.prototype.trim= function() {
        return this.replace(/^\s /, '').replace(/\s $/, '');
    };
}

// Add ECMA262-5 Array methods if not supported natively
//
if (!('indexOf' in Array.prototype)) {
    Array.prototype.indexOf= function(find, i /*opt*/) {
        if (i===undefined) i= 0;
        if (i<0) i = this.length;
        if (i<0) i= 0;
        for (var n= this.length; i<n; i  )
            if (i in this && this[i]===find)
                return i;
        return -1;
    };
}
if (!('lastIndexOf' in Array.prototype)) {
    Array.prototype.lastIndexOf= function(find, i /*opt*/) {
        if (i===undefined) i= this.length-1;
        if (i<0) i = this.length;
        if (i>this.length-1) i= this.length-1;
        for (i  ; i-->0;) /* i   because from-argument is sadly inclusive */
            if (i in this && this[i]===find)
                return i;
        return -1;
    };
}
if (!('forEach' in Array.prototype)) {
    Array.prototype.forEach= function(action, that /*opt*/) {
        for (var i= 0, n= this.length; i<n; i  )
            if (i in this)
                action.call(that, this[i], i, this);
    };
}
if (!('map' in Array.prototype)) {
    Array.prototype.map= function(mapper, that /*opt*/) {
        var other= new Array(this.length);
        for (var i= 0, n= this.length; i<n; i  )
            if (i in this)
                other[i]= mapper.call(that, this[i], i, this);
        return other;
    };
}
if (!('filter' in Array.prototype)) {
    Array.prototype.filter= function(filter, that /*opt*/) {
        var other= [], v;
        for (var i=0, n= this.length; i<n; i  )
            if (i in this && filter.call(that, v= this[i], i, this))
                other.push(v);
        return other;
    };
}
if (!('every' in Array.prototype)) {
    Array.prototype.every= function(tester, that /*opt*/) {
        for (var i= 0, n= this.length; i<n; i  )
            if (i in this && !tester.call(that, this[i], i, this))
                return false;
        return true;
    };
}
if (!('some' in Array.prototype)) {
    Array.prototype.some= function(tester, that /*opt*/) {
        for (var i= 0, n= this.length; i<n; i  )
            if (i in this && tester.call(that, this[i], i, this))
                return true;
        return false;
    };
}

ECMA262-5 diğer yöntemler uygulanmadı burada Dizi reduce/reduceRightJSON olanlar ve güvenilir bir şekilde JS fonksiyonları olarak uygulanabilir Object birkaç yeni yöntemleri vardır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ionized Digital Air Studios

    Ionized Digi

    20 HAZİRAN 2009
  • El SalvaLobo

    El SalvaLobo

    10 Temmuz 2006
  • Facebook Developers

    Facebook Dev

    24 ŞUBAT 2009