Anwenden einer Funktion auf Null in Javascript

8

Warum funktioniert Folgendes:

%Vor%

Warum ist das Ergebnis definiert? Ich rufe die Summe als eine Nullmethode auf. Aber null ist kein Objekt und kann keine Eigenschaften haben!

Was ist los?

    
Fawkes5 25.07.2012, 21:47
quelle

5 Antworten

18

Das erste Argument für Function.prototype.call ist der Kontext , der den Wert this für den Ausführungskontext der aufgerufenen Funktion definiert, nichts anderes.

Sie sagen also im Grunde, dass this sich auf null bezieht (zumindest im strikten ES5-Modus), aber da Sie auf this sowieso nicht zugreifen, macht das keinen Unterschied.

Im nicht-strikten Modus kann this nicht null sein, daher wird er stattdessen durch das globale Objekt ersetzt.

    
jAndy 25.07.2012, 21:49
quelle
12

Wenn Sie .call oder .apply mit null oder undefined verwenden, wird automatisch der Standardwert this (normalerweise window ) verwendet, wenn nicht im strikten Modus.

Von MDN (Hervorhebung von mir):

  

thisArg
  Der Wert von this wurde für den Aufruf von fun bereitgestellt. Beachten Sie, dass dies möglicherweise nicht der tatsächliche Wert ist, der von der Methode gesehen wird: Wenn die Methode eine Funktion im nicht strikten Moduscode ist, werden null und undefined durch das globale Objekt und ersetzt Primitive Werte werden eingerahmt.

Wenn Sie im strikten Modus sind, ist es tatsächlich null oder undefined .

%Vor% %Vor%     
Ryan 25.07.2012 21:49
quelle
4

Es ist nicht. NULL gibt in diesem Fall an, an welches Objekt das Schlüsselwort this gebunden ist. In Ihrer Methode, indem Sie es auf NULL setzen, wird es entweder keine this variable Bindung haben oder es wird an die Funktion selbst oder das Fenster gebunden.

Da Sie keine Variablen oder Funktionen verwenden, auf die über this zugegriffen wird, müssen Sie die Aufrufmethode nicht verwenden ... Sie können einfach sum(3,4)

verwenden     
matsko 25.07.2012 21:49
quelle
1

Wie beispielsweise in MDN angegeben, lautet das erste Argument

  

Der Wert für den Aufruf von [der Methode]. Beachten Sie, dass   Dies ist möglicherweise nicht der tatsächliche Wert, der von der Methode gesehen wird: wenn die Methode ist   Eine Funktion im nicht strikten Modus Code, null und undefiniert wird   ersetzt durch das globale Objekt, und primitive Werte werden eingerahmt.

    
Alfabravo 25.07.2012 21:52
quelle
0

Wie das MDN erklärt.

  

thisArg

     

Der Wert, der für den Aufruf von fun bereitgestellt wird. Beachten Sie, dass dies nicht möglich ist   sei der tatsächliche Wert, der von der Methode gesehen wird: wenn die Methode eine Funktion ist   Im nicht strikten Moduscode werden null und undefined durch die ersetzt   globales Objekt, und primitive Werte werden eingerahmt.

Stellen Sie es einfach durch einen kleinen Code.

%Vor%

Im strikten Modus ist dies null. Aber im nicht strikten Modus. Dies ist ein Fenster oder ein globales Objekt.

    
Joe.wang 23.05.2014 06:56
quelle

Tags und Links