2016-12-12 2 views
0

Ich schreibe Code, der this in einem Prototyp referenzieren muss, aber es kann keine Funktion sein. Javascript lässt mich das nicht tun, aber es scheint, als ob die length Eigenschaft von Arrays und Strings dies tut. Ich weiß, dass length eingebaut ist, und mein Code ist nicht, aber wenn ich kann, wie implementiere ich das?Wie funktioniert die Längeneigenschaft?

Ich habe versucht:

String.prototype.prototypeName = (function(aThing){ 
    //Do whatever I need to do here 
})(this); 

aber, dass Verweise auf das globale Objekt, weil this außerhalb der Funktion aufgerufen.

Das ist jedoch eine Funktion, und das kann ich nicht haben.

Ich kann keine Funktion haben, weil der Benutzer die Funktion aufrufen und typeof darauf verwenden kann, und der Prototyp soll eine Zeichenfolge zurückgeben. Zum Beispiel:

String.prototype.reverse = "Put something that is the reversed string (or this)"; 
console.log("Stuff"); //"ffutS" 
console.log("Anything"); //gnihtynA 
+3

Verwenden Sie einen Getter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get –

+1

"* Verweis das in einem Prototyp, aber es kann keine Funktion sein *", " * Der Prototyp soll eine Zeichenkette zurückgeben * "- was? Bitte zeigen Sie das erwartete Ergebnis, wie Sie das Ding verwenden würden, nach dem Sie fragen. – Bergi

+0

Nein, es ist unmöglich, das, was '.length' für Arrays bewirkt, erneut zu implementieren. – Bergi

Antwort

0

Sie können eine Javascript getter verwenden, um eine berechnete Eigenschaft zuzugreifen, ohne einen Prototyp-Funktion aufrufen. Beachten Sie, dass dies nur IE9 + ist.