📜  JavaScript | Reflect.construct() 方法

📅  最后修改于: 2022-05-13 01:56:55.879000             🧑  作者: Mango

JavaScript | Reflect.construct() 方法

JavaScript 中的Reflect.construct()方法用于调用新目标。它还提供了指定不同原型的附加选项。
句法:

Reflect.construct(target, argumentsList, newTarget)

参数:此方法接受三个参数,如上所述,如下所述:

  • target:这个参数是要调用的目标函数。
  • ArgumentsList:此参数是一个类似数组的对象,用于指定应该调用目标的参数。
  • newTarget:它是一个可选参数。应该使用其原型的构造函数。

返回值:此方法返回目标的新实例。
异常:当目标不是构造函数时,TypeError 是作为结果给出的异常。
下面的示例说明了 JavaScript 中的 Reflect.construct() 方法:
示例 1:

javascript
function func1(a, b, c) {
  this.sum = a + b + c;
}
 
const args = [1, 2, 3];
const object1 = new func1(...args);
const object2 = Reflect.construct(func1, args);
 
console.log(object2.sum);
 
console.log(object1.sum);
 
function func2(a, b, c) { 
  this.sum = a + b + c; 
} 
const args2 = [1, 4, 3]; 
const args3 = [1, 2, 3]; 
const object3 = new func1(...args); 
const object4 = Reflect.construct(func2, args2); 
console.log(object4.sum); 
console.log(object3.sum);


javascript
function OneClass() {
    this.name = 'one'
}
 
function OtherClass() {
    this.name = 'other'
}
const args=[1, 2, 3];
 
let obj1 = Reflect.construct(OneClass, args, OtherClass)
 
let obj2 = Object.create(OtherClass.prototype)
OneClass.apply(obj2, args)
 
console.log(obj1.name)
console.log(obj2.name) 
 
console.log(obj1 instanceof OneClass)
console.log(obj2 instanceof OneClass)
 
console.log(obj1 instanceof OtherClass)
console.log(obj2 instanceof OtherClass)


输出:

6
6
8
6

示例 2:

javascript

function OneClass() {
    this.name = 'one'
}
 
function OtherClass() {
    this.name = 'other'
}
const args=[1, 2, 3];
 
let obj1 = Reflect.construct(OneClass, args, OtherClass)
 
let obj2 = Object.create(OtherClass.prototype)
OneClass.apply(obj2, args)
 
console.log(obj1.name)
console.log(obj2.name) 
 
console.log(obj1 instanceof OneClass)
console.log(obj2 instanceof OneClass)
 
console.log(obj1 instanceof OtherClass)
console.log(obj2 instanceof OtherClass)

输出:

"one"
"one"
false
false
true
true

支持的浏览器: JavaScript Reflect.apply() 方法支持的浏览器如下:

  • 谷歌浏览器 49 及更高版本
  • 边缘 12 及以上
  • 火狐 42 及以上
  • Opera 36 及以上
  • Safari 10 及更高版本