Prototypowanie javascript - czy taki sposob jest poprawny?

0

Czesc uczac sie oop w js zaczalem samemu sobie pisac na przerozne sposoby, tak zeby zaczac swobodnie sie w tym czuc, robic coraz fajniejsze, bardziej abstrakcyjne sprawy. A otoz napisalem sobie cos takiego.

function chat() {
				this.username = 'kryspin';
			}
			chat.prototype.showuser = function() {
				console.log(this.username);
			}
			chat.prototype.inv = function() {
				var invoke = new chat();
				invoke.showuser();
			}
			chat.prototype.inv();

Czy taki sposob jest dopuszczalny czy jest to bzdura?

0

Polecam przeczytać książkę https://github.com/getify/You-Dont-Know-JS a w tym wypadku https://github.com/getify/You-Dont-Know-JS/blob/master/this%20&%20object%20prototypes/README.md#you-dont-know-js-this--object-prototypes

Jak już przeczytasz powyższą serię możesz przeczytać https://addyosmani.com/resources/essentialjsdesignpatterns/book/ i to w zasadzie da Ci solidne podstawy. Seria YDKJS da Ci wiedzę na temat języka a design patterns osmaniego pokaże Ci jak z tego korzystać (czyli odpowie na pytanie z postu wyżej).

Lektura jest darmowa. Wiem, że tego jest dużo ale taki mamy zawód.

Nie będę się nadmiernie produkował bo tam jest wszystko wyjaśnione powiem tylko w dwóch słowach:

  1. Javscript korzysta z prototype. Nie ważne, czy używasz ES6 class czy nie to cały czas bazuje o prototype.
  2. Ogólnie jest to poprawne, ale to co zrobiłeś
chat.prototype.inv = function() {
                var invoke = new chat();
                invoke.showuser();
            }

nie jest. Możesz się odwołać do tego w ten sposób

chat.prototype.inv = function() {
                this.showuser();
            }

var chat = new Chat(); // "konstrutkory" z wielkiej litery - taka konwencja.
chat.inv();
  1. Tak nie wywołujemy metod
 chat.prototype.inv();
0

No bzdura niestety.

  • robisz jakiś getter (źle nazwany - konwencja jest taka: .getPropertyName()), a jednocześnie samą właściwość zostawiasz publicznie dostępną - bez sensu,
  • wywołujesz konstruktor wewnątrz prototypu ;/
  • funkcję drukującą wynik umieszczasz wewnątrz metody obiektu ;/
  • nazwa obiektu nie reprezentująca jego zawartości.

Poniżej poprawny przykład z użyciem gettera:

function User() {
    var userName = 'kryspin';
    this.getUserName = function() {
        return userName;
    };
}

var user = new User();
console.log(user.getUserName());

A jeśli wewnątrz gettera nic nie będziesz dodawał, to równie dobrze możesz dać po prostu to (no chyba, że celem jest uniemożliwienie modyfikacji danej właściwości, wtedy trzeba użyć poprzedniego przykładu):

function User() {
    this.userName = 'kryspin';
}

var user = new User();
console.log(user.userName);
0

Dzieki pany za fajna odpowiedz, dalsze kroki do nauki. Na pewno skorzystam. Generalnie znam standardowe techniki oop, prototypow,bindowania itp. itd. ale dzisiaj tak z nudow zaczalem kombinowac i 'wymyslilem' o to takie dzielo. Jak najwyrazniej bzdura totalna :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1