可以在不更改对象构造函数的情况下向对象构造函数添加新的动态参数吗



我是Javascript的新手,正在学习对象。我已经了解到,您可以向具有原型的对象添加新的属性或方法。

function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";

现在我想知道是否也可以添加一个带有新参数的新属性,而无需直接分配新属性或更改对象构造函数。因此,它变成了:

function Person(first, last, age, eyecolor, nationality) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = nationality;
}

您可以通过将原始构造函数封装在一个新函数中来实现这一点,如下所示:

const originalPerson = Person;
Person = function(first, last, age, eyecolor, nationality) {
const instance = new originalPerson(first, last, age, eyecolor);
instance.nationality = nationality;
return instance;
};

实例:

function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
const originalPerson = Person;
Person = function(first, last, age, eyecolor, nationality) {
const instance = new originalPerson(first, last, age, eyecolor);
instance.nationality = nationality;
return instance;
};
const joe = new Person("Joe", "Bloggs", 42, "brown", "English");
console.log(joe.nationality);

你也可以通过继承来实现:

const originalPerson = Person;
Person = class extends originalPerson {
constructor(first, last, age, eyecolor, nationality) {
super(first, last, age, eyecolor);
this.nationality = nationality;
}
};

实例:

function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
const originalPerson = Person;
Person = class extends originalPerson {
constructor(first, last, age, eyecolor, nationality) {
super(first, last, age, eyecolor);
this.nationality = nationality;
}
};
const joe = new Person("Joe", "Bloggs", 42, "brown", "English");
console.log(joe.nationality);

在这两种情况下,我都重新分配了Person,但你不必这么做,你可以只使用ExtendedPerson或类似的东西:

class ExtendedPerson extends Person {
constructor(first, last, age, eyecolor, nationality) {
super(first, last, age, eyecolor);
this.nationality = nationality;
}
}

然后使用CCD_ 3。

实例:

function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
class ExtendedPerson extends Person {
constructor(first, last, age, eyecolor, nationality) {
super(first, last, age, eyecolor);
this.nationality = nationality;
}
}
const joe = new ExtendedPerson("Joe", "Bloggs", 42, "brown", "English");
console.log(joe.nationality);

相关内容

  • 没有找到相关文章

最新更新