我在JS中有这个对象:
var persona = {
nome: "",
cognome: "",
sesso: "",
telefono: "",
indirizzo: {
via: "",
numero: "",
CAP: ""
},
nascita: {
mese: "",
giorno: "",
anno: "",
CAP: ""
},
codiceFiscale: function()
{
// istruzioni per il calcolo
},
input: function(name,surname,sex,street,number,CAP1,day,month,year,CAP2)
{
// istruzioni
}
};
我想在构造函数Persone()中对其进行转换,因此我可以使用它来声明一个数组,如下所示:
var archivio = new Array();
archivio.push(new Persone());
我该怎么办?我能够在没有嵌套对象的情况下完成它,但在这里我很困惑。非常感谢提前!
答案 0 :(得分:1)
在Persone
构造函数中,您将使用您现在使用的相同类型的符号将嵌套对象分配到this
上的属性(引用新对象):
function Persone() {
this.nome = "";
this.cognome = "";
this.sesso = "";
this.telefono = "";
this.indirizzo = {
via: "";
numero: "";
CAP: ""
};
this.nascita = {
mese: "";
giorno: "";
anno: "";
CAP: ""
};
this.codiceFiscale = function() {
// istruzioni per il calcolo
};
this.input = function(name, surname, sex, street, number, CAP1, day, month, year, CAP2) {
// istruzioni
};
}
当然,如果您愿意,可以在Persone
创建属性时将参数添加到nome
(适用于this
等)。
您可以考虑将函数移到new Persone
将分配给新实例的原型(除非它们对于不同的Persone
实例需要不同),如下所示:
function Persone() {
this.nome = "";
this.cognome = "";
this.sesso = "";
this.telefono = "";
this.indirizzo = {
via: "";
numero: "";
CAP: ""
};
this.nascita = {
mese: "";
giorno: "";
anno: "";
CAP: ""
};
}
Persone.prototype.codiceFiscale = function() {
// istruzioni per il calcolo
};
Persone.prototype.input = function(name, surname, sex, street, number, CAP1, day, month, year, CAP2) {
// istruzioni
};
同样值得看一下新的class
syntax,你现在可以使用它来转换(或者越来越多):
class Persone {
constructor() {
this.nome = "";
this.cognome = "";
this.sesso = "";
this.telefono = "";
this.indirizzo = {
via: "";
numero: "";
CAP: ""
};
this.nascita = {
mese: "";
giorno: "";
anno: "";
CAP: ""
};
}
codiceFiscale() {
// istruzioni per il calcolo
}
input(name, surname, sex, street, number, CAP1, day, month, year, CAP2) {
// istruzioni
}
}
最后,如果你想用构造函数创建那些嵌套对象,你只需要这样做然后在Persone
中使用构造函数:
class Indirizzo {
constructor() {
this.via = "";
this.numero = "";
this.CAP = "";
}
}
class Nascita {
constructor() {
this.mese = "";
this.giorno = "";
this.anno = "";
this.CAP = "";
}
}
class Persone {
constructor() {
this.nome = "";
this.cognome = "";
this.sesso = "";
this.telefono = "";
this.indirizzo = new Indirizzo();
this.nascita = new Nascita();
}
codiceFiscale() {
// istruzioni per il calcolo
}
input(name, surname, sex, street, number, CAP1, day, month, year, CAP2) {
// istruzioni
}
}
答案 1 :(得分:1)
ES6(使用Classes):
class Persone {
constructor() {
this.nome = "";
this.cognome = "";
this.sesso = "";
this.telefono = "";
this.indirizzo = {
via: "";
numero: "";
CAP: ""
};
this.nascita = {
mese: "";
giorno: "";
anno: "";
CAP: ""
};
}
codiceFiscale() {
// istruzioni per il calcolo
}
input(name, surname, sex, street, number, CAP1, day, month, year, CAP2) {
// istruzioni
}
}
答案 2 :(得分:0)
function Persona(nome, cognoma) {
this.nome = noma;
this.cognoma = cognoma;
}
var persona = new Persona('test', 'test2');
persona.nome // will equal test
persona.cognoma // will equal test2
这应该这样做。
答案 3 :(得分:0)
初始化时,只需将数据传递给构造函数。
var Persona = function(data){
this.data = {
nome: data.nome,
cognome: data.cognome,
sesso: data.sesso,
telefono: data.telefono,
indirizzo: data.indirizzo,
nascita: data.nascita
};
}
Persona.prototype = {
codiceFiscale: function(){
//data object is accessible here as
//this.data.nome...
},
input: function(name,surname,sex,street,number,CAP1,day,month,year,CAP2){
// istruzioni
}
}
var arr = new Array();
arr.push(new Persona({
nome: "nome1",
cognome: "cognome1",
sesso: "sesso1",
telefono: "telefono1",
indirizzo: {},
nascita: {}
}));
arr.push(new Persona({
nome: "nome2",
cognome: "cognome2",
sesso: "sesso2",
telefono: "telefono2",
indirizzo: {},
nascita: {}
}));
console.log(arr);