2017-09-22 4 views
0

InWarum müssen wir ‚dies‘ zu ‚gelten‘ passieren

var values = [1,2,3,4,5]; 
var max = Math.max.apply(Math, values); 

Warum haben wir in Math als this Objekt zu übergeben? Es fällt mir schwer, das zu verstehen.

Gibt es irgendetwas speziell, dass this (Math) für in seiner Ausführung braucht?

+3

Nein, und Sie müssen es nicht passieren. 'Math.max.apply (null, values)' wird gut funktionieren. – Ryan

+0

Da die Methode 'this' intern nicht verwendet, können Sie dort tatsächlich etwas übergeben. –

+0

In diesem Fall brauchen Sie das nicht, da 'Math.max'' this' braucht, damit auch 'null' funktioniert. – gurvinder372

Antwort

1

Die apply() Methode (Function.prototype.apply()) ermöglichen Argumente als Array auf eine Funktion, sowie Rahmen durch diesen passieren.

func.appy(this, [argumentarray]) 

In diesem Fall wird max nicht den aktuellen Kontext benötigen oder verwenden, so dass Sie etwas setzen könnte und es wird funktionieren, einschließlich null.

Sehen Sie diese Frage: How does the Math.max.apply() work?

0

Es hängt von den internen Implementierungsdetails von max ab. Wenn es this überhaupt verwendet und thisMath erwartet, dann ist es erforderlich. Wenn es nicht this in irgendeiner Weise verwendet, ist es ziemlich irrelevant, was Sie als thisArg übergeben.

maxkann wohl einige Hilfsmethoden Math für seine interne Umsetzung verwenden. Wenn Sie nicht genau wissen, dass dies nicht der Fall ist, sollten Sie den Kontext beibehalten. (Im Allgemeinen für jedes Mal, wenn apply oder call verwenden oder eine Methode übergeben herum.)

+0

Okay, also wenn ich es tun muss, warum ist 'Math' hier der geeignete Kontext und nicht zum Beispiel' global'? – Sahand

+1

Wenn Sie es regelmäßig über 'Math.max()' aufrufen, ist der Kontext 'Math' aufgrund der Art, wie Sie es aufgerufen haben. Wenn also "max" irgendetwas als Kontext erwartet, wäre es "Math". – deceze

+0

Kommentare sind nicht für längere Diskussionen; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/155094/discussion-on-answer-by-deceze-why-do-we-have-to-pass-this-to-- sich bewerben). – deceze

Verwandte Themen