2016-06-29 2 views
-1

In den letzten paar Tagen habe ich einige Array-Methoden studiert und Sachen wie [].splice.apply und [].push.apply mit einigen Parametern gesehen.[] .splice.apply oder [] .splice.push etc

Jetzt denke ich, ich zum Beispiel

var tuna = ['bob', 'john' , 'papa' , 'greg']; 
var newArr = [] 
tuna.splice(0,2,"hello"); 
console.log(tuna); 

ausgeben wird hello,papa,greg, splice verstehen, da es zwei Begriffe in der 0-ten indice löscht.

ich weiß auch, wie Arbeiten in folgendem Zusammenhang

var person = { 
    firstname: 'John', 
    lastname: 'Doe', 
    getFullName: function() { 

     var fullname = this.firstname + ' ' + this.lastname; 
     return fullname; 

    } 
} 

var logName = function(lang1, lang2) { 

    console.log('Logged: ' + this.getFullName()); 
    console.log('Arguments: ' + lang1 + ' ' + lang2); 
    console.log('-----------'); 

} 
var logPersonName = logName.bind(person); 
logPersonName('en'); 
logName.call(person, 'en', 'es'); 
logName.apply(person, ['en', 'es']); 

So anwenden, was passiert, wenn wir diese beiden Methoden kombinieren, oder drücken Sie mit bewerben? Ein einfaches Beispiel würde wirklich helfen.

+2

'[] .splice.push' ergibt keinen Sinn. '[] .splice.apply' tut das, weil" apply "der Name einer Funktion des Function-Prototyps ist. Nun macht '[.push.apply] aus einem ähnlichen Grund Sinn. – Pointy

+0

Ja, tut mir leid, aus irgendeinem Grund habe ich das eingegeben, ohne nachzudenken. Danke für die Korrektur –

Antwort

1

Was Sie wahrscheinlich gesehen haben:

var foo = Array.prototype.slice.apply(arguments) 

Dies nimmt die slice Methode der Array, dh die kanonische Implementierung von slice und verwendet es auf einem Array-artiges Objekt, und gibt ein Array . Dies ist eine Abkürzung, um ein Array-artiges Objekt in ein tatsächliches Array zu verwandeln. Es wird nur verwendet, weil es der kürzeste und bequemste Weg ist, dieses Ziel zu erreichen. slice funktioniert mit jedem Array-artigen Objekt und gibt ein tatsächliches Array zurück, und wenn es keinen seiner zusätzlichen Parameter verwendet, macht es nichts anderes mit dem Array; deshalb ist es bequem, für diesen Zweck zu verwenden. Es ist wirklich Missbrauch die Slice-Methode für einen Zweck, für den es nicht entworfen wurde, aber da es überall funktioniert ... nun, hier verwenden wir es.

Beispiel:

var o = {}; 
o[0] = 'foo'; 
o[1] = 'bar'; 
o.length = 2; 

Dies ist ein arrayartigen Objekt, aber es hat keine tatsächlichen Array-Methoden. Ich kann o.push('baz') nicht tun, weil o kein tatsächliches Array ist. Um es in ein tatsächliches Array umzuwandeln, würde ich die obige Methode verwenden und es dann wie ein tatsächliches Array behandeln.

+0

Danke, haben Sie irgendwelche Beispiele für die Verwendung von .splice.apply? –

+0

Das ist kein typischer Verwendungszweck, aber ich bin mir sicher, dass es Situationen gibt, in denen es praktisch ist. Erstelle deine eigenen erfundenen Szenarien. – deceze

+0

Übrigens ist die Art, wie Sie hier "anwenden" erklären, anders als das Beispiel, das ich gemacht habe? Ich habe nur gelernt, es in diesem Zusammenhang zu verwenden –

Verwandte Themen