我目前正在写一个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);
它应该是私有的;相反它是公开的(似乎合法)...如何解决这个问题?
Object.create没有深入克隆,原型和构造函数的工作原理在这里解释:http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711至于克隆对象;这是一个复杂的问题。有时候你想深入克隆成员,有时你想让它们作为其他对象的引用。 – HMR 2014-11-21 23:47:14
你好,你能告诉我一些构造函数的代码吗?我不明白如何在我的情况下制作一个。难道是: VAR雇工=(函数(){ 回报{ 结构(名称){ this.name =名称|| “默认”; } NAME = “你好”; }; })( ); – Vautrinr 2014-11-22 08:21:48
评论中的链接显示了几个。构造函数只是一个函数,但用new关键字调用。 – HMR 2014-11-22 10:12:28