Array.push zurück gedrängt Wert?

Gibt es wesentliche Gründe, warum ändern Array.push() das Objekt zurückzugeben geschoben, anstatt die Länge des neuen Arrays könnte eine schlechte Idee?

Ich weiß nicht, ob dies wurde bereits vorgeschlagen, oder vorher gefragt; Google-Suche wieder nur eine unzählige Anzahl der Fragen, die im Zusammenhang mit der aktuellen Funktionalität von Array.push().

Hier ist eine Beispiel-Implementierung dieser Funktionalität, fühlen Sie sich frei, um es zu korrigieren:

;(function() {
    var _push = Array.prototype.push;
    Array.prototype.push = function() {
        return this[_push.apply(this, arguments) - 1];
    }
}());

Du dann in der Lage wäre, so etwas zu tun:

var someArray = [],
    value = "hello world";

function someFunction(value, obj) {
    obj["someKey"] = value;
}

someFunction(value, someArray.push({}));

Wo someFunction ändert das Objekt übergeben, als zweiter parameter, zum Beispiel. Nun den Inhalt someArray sind [{"someKey": "hello world"}].

Gibt es irgendwelche Nachteile hat dieser Ansatz?

Erste, schlechte Idee, um das Verhalten ändern einer built-in-Objekt, wie es brechen kann vorhandenen code. Zweitens, würden Sie ändern Array.prototype.push, nicht Array.push. Außerdem können Sie immer das element, das Sie gerade geschoben auf das array, wenn Sie es brauchen, mit array[array.length - 1] oder Sie könnten nur speichern Sie es in einer temporären lokalen variable vor der Verwendung .push(). Schlechte, schlechte Idee.
FYI, Sie brach auch die Semantik von .push() denen mehrere Argumente.
Danke für den catch. Und ja, ich bin mir bewusst, dass ich die aktuellste Objekt; in der Tat, ich kann es tun, mit ein Einzeiler: array[array.push(val) - 1]. Ich denke, diese 'Idee' ist unnötig, aber ich konnte nicht wirklich sehen, warum ohne eine Sicht von außen. Gummi-ducking und all das, nehme ich an. Oh, und Feste Semantik.
Auch, wenn Sie möchten, posten Sie Ihren Kommentar als eine Antwort werde ich akzeptieren, dass, seit Sie reagierte, bevor Bergischen. Ansonsten, ich akzeptiere seine Antwort.
wenn die Vorherige Anweisung nicht richtig enden mit einem Semikolon, was soll eine IIFE Aussehen kann, das starten von einem Aufruf einer Funktion und verursachen einen unbeabsichtigten Fehler, oder noch schlimmer, falsche Ausführung. Dies ist mir tatsächlich passiert, wenn die Arbeit auf fremden code, die scheinen zu einem gebrochenen Semikolon-Taste auf Ihrer Tastatur.

InformationsquelleAutor Elliot Bonneville | 2014-04-29

Schreibe einen Kommentar