Nelamurire legata de OOP(incepator)

De ceva vreme invat JavaScript si am ajuns la partea de OOP si incerc sa experimentez cat pot de mult, dar am ajuns la un impas si as dori sa intreb mai multe despre urmatorul cod ce incerc sa-l rulez:

function Person(age,name,life,attack,speech,report){
	var n;
	this.age = age;
	this.name = name;
	this.life = life;
	this.attack = attack;
	this.speech = function(){
		console.log("Hy my name is "+this.name+" and my age is "+this.age+" and my life is of "+this.life+".");
	};
	this.report = function(){
		console.log("His life total is: "+ this.life+".");	
	} ;
	
}

var bill = new Person(30,'Bill',50,10);
var creature = new Person(100,'Goblin',60,11);

Codul de mai sus e mai mult ca sa dau o idee de ceea ce doresc sa fac.
Am creat o functie attack cu 2 argumente attacking(attaker,victim) in care se va rula un cod ce va scadea din viata creaturii o data ce este atacata, problema mea este atunci cand doresc sa accesez viata creaturii ea ramane la fel.
O alta varianta a fost sa creez atacul lui bill intr-o forma random( ex. attack = Math.floor(Math.random()*n) unde n ar fi atacul lui la momentul respectiv.
Intrebarea mea este cum updatez pe bill cu noile date cum ar fi viata si in caz ca decid ca a primit experienta sa ii updatez si puterea de atac?

EDIT: Exact ce vrei să știi : (dar citește și ce am scris mai jos)


și

Dacă vrei să rulezi o funcție attack globală pe un obiect în JS trebuie să îi faci .bind(obiect) ca să modifici this.life în contextul obiectului dorit sau să adaugi o metodă pe constructorul Person numită attack în loc să faci o funcție separată și vei avea câte o metodă .attack bindată în clasă (în contextul prototipului) pe fiecare obiect creat. Ar mai fi opțiunea cu get și set în prototip pentru fiecare obiect la ce ai nevoie.

E greu să îți explicăm și vei avea oricum de citit o pagină întreagă, vezi un ghid complet al lui mpj despre obiecte fiindcă altfel îți prinzi urechile cu prototipurile. Ar mai trebui să te uiți și peste clase ES6 fiindcă probabil o să le înțelegi în câteva zile, pe când cu prototipurile eu nu îți pot explica fără să fac un video de 60 de minute și după tot ar trebui să explic lucruri pe care nici eu nu le știu pe de rost.


https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes => citește aici și fă obiectele cu clase ca să nu îți prinzi urechile dacă ești la început

Alte frumuseți pe care trebuie să le știi :

5 Likes

Multumesc foarte mult pentru raspunsul dat, trec imediat la treaba :stuck_out_tongue: .

1 Like