我正在写一个javascript脚本。
employe.name = Remi
employe2 = Object.create(Employe);
employe2.name = Vautrin
console.log(employe.name);//Vautrin instead of Remi
我只是想知道如何复制一个完整的对象。我已经尝试过了:
//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;
}
这是封闭代码:
var Employe = (function(){
return {
name = "Hello";
};
})();
但每当我调用一个方法时,我都会收到一个未定义函数的错误。
你能帮帮我吗? :D第二次尝试
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
第三次尝试
var EDT = (function(){
this.proprietaire;
return {
constructor : function(proprietaire){
this.proprietaire = proprietaire;
}
};
})();
console.log(employe.getEdT()._proprietaire);
它应该是私人的;相反,它是公开的(似乎是合法的)......如何解决这个问题?
答案 0 :(得分:0)
当你这样做时
employe2.name = Vautrin
它将查看employe2是否有自己的“名称”属性。由于找不到它,它会在employe2对象上创建一个“name”属性,因此代码的输出只是“Remi”。
Object.create(a,b)
的工作方式是创建一个空函数,将其原型值设置为 a ,然后使用此函数创建一个新对象。将 b 中提到的属性添加到新创建的对象中。
所以当你写了Object.create(employe);
它创建了一个新对象并将其原型设置为employees。
了解如何处理原型here的属性查找。