(function() { var myClass = function(msg) { this.msg = msg; }; myClass.prototype.alert = function() { window.alert(reverse1(this)); window.alert(reverse2.call(this)); }; var reverse1 = function(myC) { return myC.msg.split('').reverse().join(''); }; var reverse2 = function() { return this.msg.split('').reverse().join(''); }; var m = new myClass('hello world'); m.alert(); })();
Sehe ich das richtig, dass eine „Privatisierung“ der Methode
reverse
nur durch die oben gezeigten Varianten zu erreichen ist?
Ja. "Privatheit" gibt es in JavaScript nur in Form von Function Scope (Closures) und Block Scope.
Wenn Ja, welche ist zu bevorzugen?
Anhand dieses gestellten Beispiels kann man das m.E. nicht sinnvoll beantworten. Daher meine generelle Antwort:
Du hast eine (im funktionalen Sinne) "reine" Funktion. Sie nutzt einen Wert nutzt, den sie als Parameter bekommt. Und sie gibt einen neuen Wert zurück.
Funktionen sind in JavaScript die einfachste und flexibelste Technik, um Code zu strukturieren und wiederzuverwenden. Funktionen sind das, was JavaScript schön macht.
Mein Tipp: Lass eine Funktion eine Funktion sein. Sie muss keine Methode sein. Sie muss nicht privat (in einem Scope gekapselt) sein. Idealerweise ziehst du sie aus der Klasse heraus und machst sie eigenständig und wiederverwendbar.
Warum muss es eine Methode sein? Warum eine private Methode? Welche Vorteile hat das?
Nick