您可以通过将原始构造函数包装在一个新函数中来做到这一点,如下所示:
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;
}
}
...然后使用new ExtendedPerson(/*...*/)。
现场示例:
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);