Warum no () nach .length in Javascript?

8

Ich bin ein Hobby-Programmierer, habe mehrere Sprachen studiert und finde fast immer, dass "Länge" eine Methode / Funktion ist. Ich habe gelernt, dass jeder Methodenaufruf mit einer Klammer aufgerufen werden muss, auch ohne Argumente.

Nicht so in Javascript .... Warum?

C # .länge () ROR .lenth ()

usw. ...

    
mike varela 28.01.2012, 00:06
quelle

7 Antworten

11

In Javascript ist es eine Eigenschaft, keine Funktion.

In Sprachen wie C, wo die Längenfunktion den gesamten String durchlaufen muss, um das Ende zu finden, ist es logisch, es als Funktion zu haben (da es etwas Arbeit macht). In Sprachen, in denen die Länge als separater Wert beibehalten wird, ist es logisch, sie als Eigenschaft zu verwenden (da nur ein bereits vorhandener Wert gelesen wird).

    
Guffa 28.01.2012 00:09
quelle
2

Es ist, weil es eine Eigenschaft ist, keine Funktion.

Sie finden die entsprechende Dokumentation hier im MDN .

  

Diese Eigenschaft gibt die Anzahl der Code-Einheiten in der Zeichenfolge zurück.

    
Abhijeet Rastogi 28.01.2012 00:07
quelle
1

Der Name length ist eine Eigenschaft, keine Funktion. Auf eine Eigenschaft kann über den Namen zugegriffen werden, während eine Funktion mit () und möglicherweise mit Argumenten aufgerufen werden muss, um einen Wert zu erzeugen.

Zum Beispiel

%Vor%     
JaredPar 28.01.2012 00:08
quelle
1

Weil es ein bekannter Wert für das Objekt (eine Eigenschaft) ist und keine Funktion, die ausgewertet werden muss.

    
Silas Hansen 28.01.2012 00:08
quelle
1

In% ist .length eine Eigenschaft des Arrays, keine Funktion des Prototyps. Stellen Sie sich vor, Ihr Array wird wie folgt dargestellt:

%Vor%

Das ist offensichtlich Unsinn, aber der Punkt ist, dass .length eine Eigenschaft des Array-Objekts ist, keine Funktion davon, also braucht es keine nachgestellten Klammern.

    
Bojangles 28.01.2012 00:08
quelle
0

In JavaScript ist .length eine Eigenschaft und verhält sich wie eins:

%Vor%

Ссылка

Beachten Sie, dass Sie nicht nur den Wert der Eigenschaft lesen, sondern auch schreiben können.


Übrigens, In C # sind normalerweise .Length oder .Count Eigenschaften, keine Methoden:
String.Length
Array.Length
List<T>.Count

Linq macht eine Count() Methode für IEnumerable<T> verfügbar, aber das ist eine relativ neue Ergänzung.

    
gilly3 28.01.2012 00:39
quelle
0

Es gibt viele Sprachen, in denen Eigenschaften durch Methodenaufrufe einschließlich JavaScript gesichert werden können. Es liegt an den Herstellern, zu entscheiden, wie sie umgesetzt werden.

Sie können Ihre eigenen Eigenschaften durch Funktionen unterstützen lassen. Ich habe bereits eine ähnliche Frage beantwortet, also werde ich es hier nicht wiederholen.

Ruby benötigt auch keine Klammern nach einem Methodenaufruf. Dies ist ein gültiger Ruby-Code

%Vor%

Python hat auch das Konzept der funktionsbasierten Eigenschaften. Hier ist ein Beispiel in Python:

%Vor%

Klammern sind nur Syntax und wurden traditionell für Funktions- / Methodenaufrufe verwendet, aber es ist kein universeller Standard.

    
Anurag 28.01.2012 01:30
quelle

Tags und Links