I'm currently writting a javascript script.
employe.name = Remi
employe2 = Object.create(Employe);
employe2.name = Vautrin
console.log(employe.name);//Vautrin instead of Remi
I was just wondering how to copy a full object. I've already tried :
//StackOverFlow
function clone(obj) {
if (obj == null || typeof (obj) != 'object')
return obj;
var temp = obj.constructor(); // changed
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
temp[key] = clone(obj[key]);
}
}
return temp;
}
This is the closure code :
var Employe = (function(){
return {
name = "Hello";
};
})();
But whenever I call a method, I get an error of non defined function.
Could you help me please ? :D
Second attempt
var EdT = (function() {
var _nbJoursTravaille = 0;
var _semaine ;
var _proprietaire;
return {
constructor: function(proprietaire) {
_proprietaire = proprietaire;
return this;
},
};
});
var Employe = (function() {
var _id;
var _nom;
var _prenom;
var _metier;
var _tel;
var _edT ;
return {
constructor: function(id, nom, prenom, metier, tel) {
_id = id;
_nom = nom;
_prenom = prenom;
_metier = metier;
_tel = tel;
_edT= Object.create(EdT).constructor(nom + " " + prenom);
return this;
},
//.... Some code
};
});
var employe = Object.create(Employe).constructor("id", "nom", "Rémi", "AlmostJsDev", "+33");
var employe2 =Object.create(Employe).constructor("id", "nom", "Rémi1234", "AlmostJsDev", "+33");
console.log(employe.getEdT().getProprietaire()); //Remi1234
Third Attempt
var EDT = (function(){
this.proprietaire;
return {
constructor : function(proprietaire){
this.proprietaire = proprietaire;
}
};
})();
console.log(employe.getEdT()._proprietaire);
It should be private ; instead it's public (seems legit) ... How to fix that ?
When you do
it will see if employe2 has a "name" property on itself. Since it could not find one, it creates a "name" property on the employe2 object, and hence the output of your code is "Remi" only.
The way
Object.create(a,b)
works is create a empty function, set it's prototype value to a, then create a new object using this function. Add the properties mentioned in b to the newly created object.So when you wrote Object.create(employe);
It created a new object and set it's prototype to employe.
Read about how property lookups are handled for prototypes here.