new.target 屬性

admin發表於2018-12-14

new.target返回new運算子後面所呼叫的建構函式或者類。

如果函式並非用作建構函式,返回值為undefined。

關於class類更多內容參閱JavaScript class 類一章節。

ES2015新增此屬性。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function Antzone() {
  if (new.target !== undefined) {
    console.log("用作建構函式");
  }else{
    console.log("用作普通函式");
  }
}
new Antzone();
Antzone();

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201812/14/011213ngbqtu6wbuuzletb.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

根據函式Antzone的使用方式不同,列印出不同的結果。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
class Antzone{
  constructor() {
    if (new.target == Antzone) {
      console.log("用作建構函式");
    }
  }
}
new Antzone();

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201812/14/011247wivzgf13fdnp3pxz.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

對於類也是同樣的作用,但是需要注意一點,類不能被用作普通函式。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
class A {
  constructor() {
    console.log(new.target == B);
  }
}
class B extends A {
  constructor(length) {
    super(length, length);
  }
}
new B()

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201812/14/011311k6knpqono3voaokg.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

當存在繼承關係時,此屬性返回的是子類名稱。