📅  最后修改于: 2023-12-03 15:31:39.226000             🧑  作者: Mango
JavaScript中,Reflect.construct()方法是用于实例化构造函数的方法。它与普通的new关键字类似,但提供了更多的灵活性和控制能力。
Reflect.construct(target, args[, newTarget])
参数说明:
Reflect.construct()方法返回一个新的对象实例,该对象实例是 target 的一个新实例。如果构造函数返回一个对象,则将此对象返回。
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const person = Reflect.construct(Person, ['John', 25]);
console.log(person.name); // John
console.log(person.age); // 25
该代码将使用 Reflect.construct() 方法实例化 Person 类,传递 name 和 age 作为参数,并将返回的实例分配给 person 变量。
class Person {
constructor(name) {
this.name = name;
}
}
class Employee extends Person {
constructor(name, title) {
super(name);
this.title = title;
}
}
const employee = Reflect.construct(Employee, ['John', 'Developer']);
console.log(employee.name); // John
console.log(employee.title); // Developer
该代码将创建一个继承自 Person 类的 Employee 子类的实例,并传递 name 和 title 作为参数。
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
class Employee extends Person {
constructor(name, age, title) {
super(name, age);
this.title = title;
}
}
const employee = Reflect.construct(Person, ['John', 25], Employee);
console.log(employee instanceof Person) // true
console.log(employee instanceof Employee) // true
该代码将使用 Reflect.construct() 方法实例化 Person 类,传递 name 和 age 作为参数,并将新实例分配给 employee 变量。但是,此次我们使用了 newTarget 参数,将其设置为 Employee 构造函数。使用 newTarget 参数将使得继承关系生效。
Reflect.construct() 方法为实例化构造函数提供了更多的控制和灵活性,特别是在继承和多态性方面。在特定情况下,它比传统的 new 关键字更加优秀。