Sollte eine JavaScript-Klasse explizit etwas zurückgeben?
-
29-09-2019 - |
Frage
Ich habe einige Adobe Illustrator javascripts geschrieben meinen Workflow zu verbessern. Ich habe wirklich in den Griff bekommen OOP vor kurzem, damit ich es Objekte mit Schreiben habe und ich glaube wirklich, hilft es, meinen Code sauber zu halten und leicht up-datierbar. Allerdings wollte ich mit euch einige Best-Practice überprüfen.
Ich habe ein Rechteck-Objekt, das erstellt (drei Vermutungen) ... ein Rechteck. Es sieht aus wie dieser
function rectangle(parent, coords, name, guide) {
this.top = coords[0];
this.left = coords[1];
this.width = coords[2];
this.height = coords[3];
this.parent = (parent) ? parent : doc;
var rect = this.parent.pathItems.rectangle(this.top, this.left, this.width, this.height);
rect.name = (name) ? name : "Path";
rect.guides = (guide) ? true : false;
return rect;
}
Allerdings funktioniert der Code in Ordnung mit oder ohne die letzt
return rect
Also meine Frage ist, was tut
new rectangle(args);
zurück, wenn ich nicht ausdrücklich so sagen?
Wenn ich dies tun:
var myRectangle = new rectangle(args);
myRectangle.left = -100;
Es funktioniert gut, ob ich return rect
oder nicht.
Vielen Dank für Sie Hilfe.
Lösung
Ihr Javascript-Objekt sollte nur Eigenschaften und Methoden hat.
Verwenden Sie das Schlüsselwort return innerhalb einer Methode.
function rectangle(parent, coords, name, guide) {
this.top = coords[0];
this.left = coords[1];
this.width = coords[2];
this.height = coords[3];
this.parent = (parent) ? parent : doc;
this.draw = function () { // add a method to perform an action.
var rect = this.parent.pathItems.rectangle(this.top, this.left, this.width, this.height);
rect.name = (name) ? name : "Path";
rect.guides = (guide) ? true : false;
return rect;
};
}
Wie Sie Ihr Objekt verwenden würden.
var myRectangle = new rectangle(args);
myRectangle.draw();
Andere Tipps
Absolut unnötig. Eine Instanz wird automatisch erstellt und zugewiesen werden, wenn Sie new
nennen. Keine Notwendigkeit, Rückkehr this
oder so etwas.
In streng OOP-Sprachen wie Java oder C ++ , Konstrukteuren nichts zurückgeben .