Javascript:嵌套对象的构造函数

时间:2017-09-18 12:53:28

标签: javascript

我在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());

我该怎么办?我能够在没有嵌套对象的情况下完成它,但在这里我很困惑。非常感谢提前!

4 个答案:

答案 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);