Reflect.construct() 方法

admin發表於2019-05-11

關於Proxy更多內容可以參閱JavaScript Proxy和Reflect一章節。

此方法行為有點像new操作符 建構函式,相當於執行new target(...args)。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
Reflect.construct(target, argumentsList[, newTarget])

引數解析:

(1).target:執行的建構函式。

(2).argumentsList:陣列或者偽陣列,儲存了給建構函式傳遞的引數。

(3).newTarget:可選,被用作建構函式。

特別說明:如果target或者newTarget不是建構函式就會報錯。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var date = Reflect.construct(Date, [2016, 5, 27]);
console.log(date instanceof Date);
console.log(date.getFullYear());

Date()被以建構函式的方式呼叫,引數是陣列[2016, 5, 27]中的元素。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let target = function (webName, url) {
  this.webName = webName;
  this.url = url;
}
target.prototype.a = 1;
let newTarget = function () {
  this.age = 4;
}
newTarget.prototype.b = 2;
let otarget = Reflect.construct(target, ["螞蟻部落", "www.softwhy.com"], newTarget);
console.log(otarget.webName)
console.log(otarget.age)
console.log(otarget.a)
console.log(otarget.b)

newTarget會被用作建構函式,但是有一些細節需要注意:

(1).例項otarget具有target建構函式中的屬性,但是不具有target原型物件上的屬性。

(2).例項otarget不具有newTarget建構函式中的屬性,但是具有newTarget原型物件上的屬性。

相關文章