【发布时间】:2015-01-20 03:55:10
【问题描述】:
我目前正在编写一个 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 没有深度克隆,原型和构造函数如何工作在这里解释:stackoverflow.com/questions/16063394/… as for cloning objects;这是一个复杂的问题。有时您想深度克隆成员,有时您想将它们作为对其他对象的引用。
-
你好,你能告诉我一些构造函数的代码吗?我不明白如何在我的情况下制作一个。会是: var Employe = (function(){ return {Construct(name){ this.name = name || "default"; } name = "Hello"; }; })();
-
评论中的链接显示了几个。构造函数只是一个函数,但使用 new 关键字调用。
-
所以我有一个新问题:如何使属性“私有”?
-
我从来没有这样做过,但是有一个指向受保护模式的链接,它也应该涵盖如何模拟私有成员。
标签: javascript closures private accessor