2013-02-07 10 views
11

ich nicht helfen kann, aber feststellen, gibt es zwei scheinbar nutzlose Funktionen in den Quellcode von jQuery (Für v1.9.1, dann ist es Linie 2702 und die Linie 2706):returnTrue und returnFalse Funktionen in jQuery Quelle

function returnTrue() { 
    return true; 
} 

function returnFalse() { 
    return false; 
} 

Welche beide oft innerhalb von jQuery aufgerufen werden. Gibt es einen Grund, warum sie den Funktionsaufruf nicht einfach durch einen booleschen true oder false ersetzen?

+0

Neben den unten Antworten gibt es wahrscheinlich auch Performance-Gründen für eine einzelne Definition statt anonyme Funktionen am ganzen Körper. –

Antwort

4

wurde wie folgt verwendet:

stopImmediatePropagation: function() { 
    this.isImmediatePropagationStopped = returnTrue; 
    this.stopPropagation(); 
} 

hier isImmediatePropagationStopped ist eine Abfrage Methode. wie diese event.isImmediatePropagationStopped()

natürlich verwendet, können Sie eine Instanz-Methode, wie definieren:

event.prototyoe.isImmediatePropagationStopped = function() { return this._isImmediatePropagationStopped }; 

stopImmediatePropagation: function() { 
    this._isImmediatePropagationStopped = true; //or false at other place. 
    this.stopPropagation(); 
} 

aber Sie haben eine neue Instanz Eigenschaft einzuführen _isImmediatePropagationStopped den Status zu speichern.

mit diesem Trick können Sie Bündel von Eigenschaften der Instanz für zu halten wahr/falsch Status hier, wie _isImmediatePropagationStopped, _isDefaultPrevented usw.

so dass, meiner Meinung nach abschneiden, ist dies nur eine Frage der Code-Stil, nicht richtig oder falsch.

PS: Die Abfragemethoden für Ereignis, wie isDefaultPrevented, isPropagationStopped, isImmediatePropagationStopped sind in DOM-Ereignisstufe 3 Sepc definiert.

spec: http://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html#Events-Event-isImmediatePropagationStopped

+0

Warum verwenden Sie dann nicht "isimmediatePropagationStopped" als Instanzeigenschaft? Also können wir es verwenden wie 'if (event.isImmediatePropagationStopped)' anstelle von 'if (event.isImmediatePropagationStopped()) '? – rexcfnghk

+0

Es ist auch Teil der W3C-Spezifikation (weiß nicht, warum Sie den Kommentar gelöscht haben): http://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html# Events-Event-isImmediatePropagationStopped –

+0

weil die API durch w3c definiert ist: ** http: //www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html # Events-Event-isDefaultPrevented ** –

11

Wenn eine Objekteigenschaft, ein Funktionsargument usw. eine function erwartet, sollten Sie eine function keine boolean bereitstellen.

Zum Beispiel in Vanille JavaScript:

var a = document.createElement("a"); 
a.href = "http://www.google.com/"; 
/* 
* see https://developer.mozilla.org/en-US/docs/DOM/element.onclick 
* element.onclick = functionRef; 
* where functionRef is a function - often a name of a function declared 
* elsewhere or a function expression. 
*/ 
a.onclick = true;      // wrong 
a.onclick = returnTrue;     // correct 
a.onclick = function() { return true; }; // correct 

auch schriftlich:

someProperty: returnTrue, 

ist bequemer als Schreiben:

someProperty: function(){ 
    return true; 
}, 

Vor allem, da sie recht häufig genannt werden .

+0

Können Sie erklären, warum Sie nicht einfach 'someProperty: true' verwenden können? – rexcfnghk

+4

'true' ist anders als eine Funktion, die true zurückgibt. Wenn eine Eigenschaft oder ein Argument eine Funktion erfordert, kann sie nicht durch das Literal 'true' ersetzt werden. –