Proxy handler.construct() 方法

admin發表於2019-04-21

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

此方法會攔截Proxy例項作為建構函式呼叫的操作;返回值是一個物件。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
var p = new Proxy(target, {
  construct: function(target, argumentsList, newTarget) {
    //code
  }
});

引數解析:

(1).target:可選,要被代理的目標物件,一個函式。

(2).argumentsList:可選,p用作建構函式時被傳遞的引數。

(3).newTarget:可選,Reflect.construct()第三個引數,newTarget被用作建構函式。

Reflect.construct()具體用法可以參閱Reflect.construct()用法一章節。

特別說明:如果返回值不是一個物件會報錯。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let target = function (webName, url) {
  this.webName = webName;
  this.url = url;
}
var p = new Proxy(target, {
  construct: function (target, argumentsList) {
    return {
      webName: argumentsList[0],
      url: argumentsList[1]
    };
  }
});
console.log(new p("螞蟻部落", "www.softwhy.com")["webName"]);

argumentsList就是傳遞給p()的引數。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let target = function (webName, url) {
  this.webName = webName;
  this.url = url;
}
var p = new Proxy(target, {
  construct: function (target, argumentsList) {
    return "螞蟻部落"
  }
});
console.log(new p());

construct()返回值必須是一個物件,否則會報錯。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let target = function (webName, url) {
  this.webName = webName;
  this.url = url;
}
let newTarget=function(){
  this.address="青島市南區";
}
var p = new Proxy(target, {
  construct: function (target, argumentsList, newTarget) {
    console.log(argumentsList);
    console.log(newTarget);
    return {};
  }
});
Reflect.construct(p, ["螞蟻部落", "www.softwhy.com"], newTarget)

相關文章