【问题标题】:Create a link between objects创建对象之间的链接
【发布时间】:2020-11-06 08:38:39
【问题描述】:

我正在学习 JavaScript,我创建了三个具有某些属性的不同对象:Person、House 和 Car。

let House = function(city, postalCode, street, streetNumber){

  this.city = city;
  this.postalCode = postalCode;
  this.street = street;
  this.streetNumber = streetNumber;

  return {

    getAddress: function() {

      return {
        'address': {
          'city': city,
          'postalCode': postalCode,
          'street': street,
          'streetNumber': streetNumber
        }
      };

    }

  };

};

let Person = function(name, surname, yearOfBirth, monthOfBirth, dayOfBirth, bornCity, employment){

  this.name = name;
  this.surname = surname;
  this.yearOfBirth = yearOfBirth;
  this.monthOfBirth = monthOfBirth;
  this.dayOfBirth = dayOfBirth;
  this.bornCity = bornCity;
  this.employment = employment;

  return {

    getFullPerson: function() {

      return {
          'personalInformation': {
            'name': name,
            'surname': surname,
            'dateOfBirth': {
              'year': yearOfBirth,
              'month': monthOfBirth,
              'day': dayOfBirth
            },
            'bornCity': bornCity
          },
          'employment': employment,
          'home': getAddress(), // pseudocode
          'car': getCar() // pseudocode
      };

    }

  };

};

我想在这些对象之间创建一个链接,因为我需要调用,例如,谁住在房子里,反之亦然;但我不清楚如何做到这一点。

【问题讨论】:

标签: javascript


【解决方案1】:

这是一种方法:

let House = function(city, postalCode, street, streetNumber){

  this.city = city;
  this.postalCode = postalCode;
  this.street = street;
  this.streetNumber = streetNumber;

  return {

    getAddress: function() {

      return {
        'address': {
          'city': city,
          'postalCode': postalCode,
          'street': street,
          'streetNumber': streetNumber
        }
      };

    }

  };

};

let Person = function(name, surname, yearOfBirth, monthOfBirth, dayOfBirth, bornCity, employment, house, car){

  this.name = name;
  this.surname = surname;
  this.yearOfBirth = yearOfBirth;
  this.monthOfBirth = monthOfBirth;
  this.dayOfBirth = dayOfBirth;
  this.bornCity = bornCity;
  this.employment = employment;
  this.house = house;
  this.car = car;

  return {

    getFullPerson: function() {

      return {
          'personalInformation': {
            'name': name,
            'surname': surname,
            'dateOfBirth': {
              'year': yearOfBirth,
              'month': monthOfBirth,
              'day': dayOfBirth
            },
            'bornCity': bornCity
          },
          'employment': employment,
          'home': (house ? house.getAddress() : null), // pseudocode
          'car': (car ? car.getCar() : null)  // pseudocode
      };

    }

  };

};

let house1 = new House('city', 'postalCode', 'street', 'streetNumber');

let person1 = new Person('person', '1', 2020, 1, 1, 'bornCity', 'employment', null, null);
let person2 = new Person('person', '2', 2020, 1, 1, 'bornCity', 'employment', house1, null);


console.log(person1.getFullPerson());
console.log(person2.getFullPerson());

创建要与Person 关联的任何HouseCar 对象。然后,您可以在创建每个Person 时选择传入homecar 对象。每个homecar 对象也将在Person 对象中提供其功能。

【讨论】:

  • 谢谢!一个问题:这个(house ? house.getAddress() : null) 是一个if else 声明。对?听起来像这样:if there is house get house, else null
  • 完全正确,它只是一种更短的方法,称为ternary operator。如果Person 对象没有与之关联的House/Car,它可以避免错误。 ?
【解决方案2】:

正如我所见,您希望在 Person 对象中引用一个人的家和汽车。因此,您需要做的唯一事情就是将 House 和 Car 对象传递给 Person:

let Person = function (
  name,
  surname,
  yearOfBirth,
  monthOfBirth,
  dayOfBirth,
  bornCity,
  employment,
  home,
  car
) {
  this.name = name
  this.surname = surname
  this.yearOfBirth = yearOfBirth
  this.monthOfBirth = monthOfBirth
  this.dayOfBirth = dayOfBirth
  this.bornCity = bornCity
  this.employment = employment
  this.home = home
  this.car = car

  return {
    getFullPerson: function () {
      return {
        personalInformation: {
          name: name,
          surname: surname,
          dateOfBirth: {
            year: yearOfBirth,
            month: monthOfBirth,
            day: dayOfBirth,
          },
          bornCity: bornCity,
        },
        employment: employment,
        home: home.getAddress(),
        car: car.getCar(),
      }
    },
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多