了解new.target

一、new.target的基礎知識

new.target是一個特殊的meta屬性,它指向調用構造函數的構造器函數。如果在非構造函數中使用,它將是undefined.

class Foo {
  constructor() {
    console.log(new.target === Foo); // true
  }
}

new Foo();

上面的代碼中,new.target指向被調用的構造函數,因此在構造函數內部使用new.target得到的就是構造函數本身。

二、new.target的應用場景

new.target可用於實現多態。

class Shape {
  constructor() {
    console.log(new.target);
  }
}

class Rectangle extends Shape {
  constructor() {
    super();
  }
}

class Circle extends Shape {
  constructor() {
    super();
  }
}

new Rectangle(); // 輸出Rectangle
new Circle(); // 輸出Circle

上面的代碼中,當實例化Rectangle和Circle時都調用了Shape的構造函數,但是通過使用new.target可以獲取到實例化對象的構造函數從而實現多態。

此外,new.target也可以用於檢測構造函數的可用性。

function Foo() {
  if (!new.target) {
    throw 'Foo()必須使用new運算符調用!';
  }
  console.log('foo');
}

new Foo(); // 輸出foo
Foo(); // 拋出錯誤

上面的代碼中,如果Foo()沒有使用new運算符調用,將會拋出錯誤。

三、總結

new.target是ES6引入的一個特殊的meta屬性,用於指向調用構造函數的構造器函數。它可以用於實現多態,檢測構造函數的可用性等。在實際開發中,合理使用new.target可以提高代碼的可讀性,減少一些錯誤發生的可能性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/297762.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:16
下一篇 2024-12-28 12:16

相關推薦

  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • JavaScript中使用new Date轉換為YYYYMMDD格式

    在JavaScript中,我們通常會使用Date對象來表示日期和時間。當我們需要在網站上顯示日期時,很多情況下需要將Date對象轉換成YYYYMMDD格式的字符串。下面我們來詳細了…

    編程 2025-04-27
  • 如何使用return new crontrigger(cron).nextexecutiontime(triggercontext)實現定時調度

    如果你正在尋找一種可靠且簡單的方式來實現定時調度,那麼你可能需要了解return new crontrigger(cron).nextexecutiontime(triggerco…

    編程 2025-04-27
  • 深入剖析c++中new的用法

    一、c++中new關鍵字的概述 new關鍵字是c++中用來動態地分配內存空間的操作符。使用new運算符可以在程序運行時從堆(heap)中分配內存空間,而delete運算符則可以釋放…

    編程 2025-03-12
  • new Date().getTime()詳解

    在學習JavaScript基礎和開發過程中,我們經常會用到時間處理的相關功能,其中一個重要的方法就是new Date().getTime()。new Date()是一種常用的時間對…

    編程 2025-02-25
  • JavaScript中的new Map()

    一、Map Map是JavaScript中的一種可迭代的鍵值對容器,其中每個鍵和值可以是任何類型。在ES6中被提出,它可以用來存儲和操作鍵值對數據。 const myMap = n…

    編程 2025-02-05
  • c++ new用法全解析

    一、動態內存分配 c++ new主要用於動態內存分配,可以在程序運行時根據需要分配內存空間。使用new創建的變量是存儲在堆上,因此不會隨着函數的結束而被清除。 下面是一個簡單的示例…

    編程 2025-01-27
  • target用法詳解

    一、target用法及搭配 target是一個英文單詞,它的意思是「目標」,在編程中有着非常廣泛的應用。 我們可以使用target來指定一個HTML元素所要鏈接到的目標網頁。例如:…

    編程 2025-01-27
  • 深入了解new RegExp

    一、RegExp是什麼 RegExp(正則表達式)是JavaScript中處理字符串的強大工具,可以使用它來做驗證、替換和提取等操作。在JavaScript中,RegExp是一個內…

    編程 2025-01-27
  • new與malloc的區別和使用

    一、new和malloc的基本概念 new和malloc都是用於動態分配內存的函數。dynamic memory allocation是指在程序運行時動態分配內存,也稱堆分配(he…

    編程 2025-01-27

發表回復

登錄後才能評論