jQuery - Entwurfsinkonsistenz zwischen $ .map () & .map ()?

8

Während die Schnittstelle der Methode .map() .map( callback(index, domElement) ) ist, ist es $.map( array, callback(elementOfArray, indexInArray) ) für $ .map () ... Irgendeine Idee über den Grund, warum $ .map () die zurückgegebenen Argumente in einer Reihenfolge wie z als Wert-Index?

    
Kay 15.08.2012, 04:11
quelle

3 Antworten

2

Wenn Sie die jQuery-API untersuchen, werden Sie feststellen, dass alle Methoden, die an einer Gruppe ausgewählter Elemente arbeiten und Rückrufe akzeptieren, wie zum Beispiel .each , .html , .text usw. den Index der Element als erstes Argument, dh .map steht hier im Einklang. Normalerweise greifen Sie auf das aktuelle Element mit this innerhalb des Callbacks zu, dies ist nur ein übliches Muster in jQuery und daher haben die Entwickler vielleicht entschieden, dass es wichtiger ist, den Index als erstes Argument zu haben.

Auf der anderen Seite die native Array.prototype.map -Methode übergibt den Wert von element als erstes Argument an den Callback, daher scheint es sinnvoll zu sein, dass $.map auf die gleiche Weise funktioniert, da es eine generische Menge von Items verarbeiten soll.

    
Felix Kling 15.08.2012, 04:29
quelle
7

Weil die API nicht perfekt ist. Es begann inkonsistent, aber das zu beheben, würde den vorhandenen Code, der $.map() verwendet, unterbrechen.

  • Ссылка : "Es gibt keine Möglichkeit, dies zu beheben und die Abwärtskompatibilität aufrechtzuerhalten."
  • Ссылка : "Die Argumente sind umgekehrt, aber es würde viel Code kaputt gehen, um es zu ändern."
Matt Ball 15.08.2012 04:19
quelle
1

Ja, es gibt einen Unterschied zwischen jQuery (). map () und jQuery.map ().

Um einige Unterschiede zu skizzieren:

  

jQuery.map () = Dies neigt dazu, über generische Sammlung zu iterieren

     

jQuery (). map () = Arrayähnliche Objekte müssen in Arrays umgewandelt werden   (.makeArray ())

     

jQuery.map () = wird hauptsächlich zum Abrufen oder Festlegen des Wertes von verwendet   eine Sammlung von Elementen und die Rückgabe dieses neuen Array

Auch .map () ist eine ECMAScript5-Funktion und außerhalb von jQuery definiert (obwohl implementiert). Man fragt sich, ob jQuery (). Map () eine ältere Implementierung war. .map () ist anscheinend schneller!

John Resig stellt fest: "jQuery.map wurde in erster Linie für die Verwendung mit Arrays von DOM-Elementen entworfen (wie in der Dokumentation beschrieben). Aus diesem Grund macht es Dinge wie das Entfernen von null / undefiniert und flacht Arrays von Knoten in ein einzelnes Array. " Dies ist wie in ECMA (Mozilla) definiert. Die andere Implementierung ist Resigs selbst, daher der Unterschied. Das ist kein schlechtes Design !!!!!! Lesen

Zweiter Grund: "Es ist nicht so einfach, es einfach zu reparieren" ... Der Callback von jQuery.map hat eine Parameterreihenfolge, die mit Array.prototype.map übereinstimmt, während die Parameterreihenfolge von jQuery.fn.map mit allen anderen jQuery-Objekt-Iterator-Callbackparamfolgen übereinstimmt oder die andere würde die Rückwärtskompatibilität brechen, die jQuery mit großer Mühe vermeidet " Lesen

    
Dane Balia 15.08.2012 04:33
quelle

Tags und Links