Tworzę klasę Vector, która może zasadniczo zawierać trzy wartości liczbowe. Jednak na takich wektorach można wykonać wiele operacji - np. uzyskiwanie wielkości, dodawanie lub odejmowanie innego wektora itd.Czy powinienem użyć prototypu, czy nie?
Zastanawiałem się, czy te funkcje powinny być kodowane jako prototypowe funkcje klasy Vector, czy też powinienem je zdefiniować w konstruktorze.
Która z tych dwóch metod jest lepsza?
function Vector3D(x, y, z) {
this.x = x;
this.y = y
this.z = z;
}
Vector3D.prototype.magnitude = function() {
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
};
lub
function Vector3D(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
this.magnitude = function() {
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
};
}
Dzięki za reakcję. x, y i z powinny być również możliwe do wyodrębnienia z instancji Vector3D, więc powinny być publiczne. W takim przypadku prototyp mógłby być najlepszym wyborem? – pimvdb
+1 dla poprawnej odpowiedzi, ale ja wolę prototypy, ponieważ wszystko, co prywatne w js jest potokiem, i zwykle tylko utrudni ci jednostkowe przetestowanie twojego kodu - kogo ukrywasz z wyjątkiem siebie :) –
Zgadzam się z tobą, dlatego mam tylko publiczne zmienne. W Narzędziach dla programistów Google Chrome funkcje są również wyświetlane jako członkowie, jeśli zostaną przekazane przez konstruktora, podczas gdy byłoby bardziej praktyczne, gdyby były "ukryte" w prototypie i że pojawiłyby się tylko x, yiz. – pimvdb