目錄
JavaScript中建構函式與new運算子的實例詳解
建構函數
雙重使用建構器: new.target
建構器傳回值
建構器中的方法
總結
首頁 web前端 js教程 JavaScript中建構函數與new運算子的實例詳解

JavaScript中建構函數與new運算子的實例詳解

Aug 08, 2017 pm 01:54 PM
javascript js 實例


JavaScript中建構函式與new運算子的實例詳解

{…}語法允許建立一個對象,但如果需要建立多個類似的對象,則我們需要使用建構函式和“new”操作符。

建構函數

建構子技術上就是正常的函數,但一般有兩個約定:
1、他們的名稱第一個字母大寫。
2、他們應該只使用new操作符執行。

範例:

function User(name) {
  this.name = name;
  this.isAdmin = false;
}

let user = new User("Jack");

alert(user.name); // Jack
alert(user.isAdmin); // false
登入後複製

我們來看執行new User()時背後到底做了什麼?
1、先建立一個空對象,然後賦值給this。
2、執行函數,通常修改this對象,增加一些新的屬性。
3、this被回傳。

換句話說,new User() 內容如下程式碼所示:

function User(name) {
  // this = {};  (implicitly)

  // we add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  (implicitly)
}
登入後複製

所以new User("Jack") 的結果和下面程式碼一致:

let user = {
  name: "Jack",
  isAdmin: false
};
登入後複製

現在我們想要建立其他對象,我們可以使用new User("Ann") ,new User("Alice") 等。比每次使用文字描述物件方式更簡短,且易讀。
這時建構函數的主要目的——————實現創建物件的程式碼重用。

讓我們再次注意:
 技術上,任何函數都可以用作構造器,即任何函數都可以使用new調用,並且也執行上面描述的演算法。
 首字母大寫只是一個常規約定,使其更清晰說明其為構造韓式,應該使用new調用。

new function(){…}
如果我們有多行程式碼,用於建立一個複雜對象,我們可以包裝他們使用建構函數,程式碼如下:

  let user = new function() { 
     this.name = “John”; 
     this.isAdmin = false;
  // ...other code for user creation
  // maybe complex logic and statements
  // local variables etc
};
登入後複製

該建構器不能再次調用,因為沒有被保存,僅僅被調用創建物件。這個技巧的母的只是為了封裝單一複雜物件程式碼。

雙重使用建構器: new.target

函數內部,我們可以檢查其呼叫方式是否使用new方式。使用一個特殊的屬性new.target可以。
普通呼叫其值為空,透過new呼叫其值為該函數。

function User() {
  alert(new.target);
}

User(); // undefined
new User(); // function User { ... }
登入後複製

下面程式碼可以實現使用常規方式和new操作方式效果一致。

function User(name) {
  if (!new.target) { // if you run me without new
    return new User(name); // ...I will add new for you
  }

  this.name = name;
}

let john = User("John"); // redirects call to new User
alert(john.name); // John
登入後複製

這個方法在一些函式庫中使用,為了讓程式碼更有彈性。但到處使用並非好事,對熟悉User物件內部狀況不夠明顯。

建構器傳回值

通常建構器無需傳回值語句。它的任務是往this物件中寫一些必要內容,然後自動返回之。
但如果有return語句,那麼規則很簡單:
- 如果return返回一個對象,那麼則代替this被返回。
- 如果return回傳原始類型,則被忽略,仍然傳回this。

也就是說,return要麼返回對象,要麼返回this,下面示例代替this返回對象,示例如下:

function BigUser() {

  this.name = "John";

  return { name: "Godzilla" };  // <-- returns an object
}

alert( new BigUser().name );  // Godzilla, got that object
登入後複製

這個示例return空,或者在寫原始類型,其實都不影響。

function SmallUser() {

  this.name = "John";

  return; // finishes the execution, returns this

  // ...

}

alert( new SmallUser().name );  // John
登入後複製

大多數建構子不需要返回,這裡提醒這種特殊行為,只是為了知識完整性。

忽略括號
順便說下,呼叫建構子是,如果沒有參數,我們可以省略物件標識後面的括號。

let user = new User; // <-- no brackets
// same as
let user = new User();
登入後複製

忽略括號並不是一個好的程式碼風格,但規範中是允許的。

建構器中的方法

使用建構子建立物件提供了很大的靈活性,提供參數可以定義不同的物件。
當然,我們不只為this增加屬性,也可以增加方法。

下面範例建立對象,使用name參數,並增加一個方法sayHi:

function User(name) {
  this.name = name;

  this.sayHi = function() {
    alert( "My name is: " + this.name );
  };
}

let john = new User("John");

john.sayHi(); // My name is: John

/*
john = {
   name: "John",
   sayHi: function() { ... }
}
*/
登入後複製

總結

  • 建構子或簡稱建構器,是普通函數,但有一般約定,名稱第一個字母大寫。

  • 建構子使用new調用,也就是開始建立一個空this對象,然後傳回填滿內容的this。

我們能使用建構子建立多個類似對象,當日內容不只這些,後面進一步說明。
Javascript為一些內建物件提供了建構函數,如日期的Date,集合Set等。

以上是JavaScript中建構函數與new運算子的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1662
14
CakePHP 教程
1419
52
Laravel 教程
1311
25
PHP教程
1262
29
C# 教程
1235
24
建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 Dec 17, 2023 pm 06:55 PM

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟,需要具體程式碼範例隨著網路和科技的快速發展,股票交易已成為許多投資者的重要途徑之一。而股票分析是投資人決策的重要一環,其中蠟燭圖被廣泛應用於技術分析。學習如何使用PHP和JS繪製蠟燭圖將為投資者提供更多直觀的信息,幫助他們更好地做出決策。蠟燭圖是一種以蠟燭形狀來展示股票價格的技術圖表。它展示了股票價格的

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

js和vue的關係 js和vue的關係 Mar 11, 2024 pm 05:21 PM

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務

學習Golang指標轉換的最佳實務範例 學習Golang指標轉換的最佳實務範例 Feb 24, 2024 pm 03:51 PM

Golang是一門功能強大且高效的程式語言,可用於開發各種應用程式和服務。在Golang中,指標是一種非常重要的概念,它可以幫助我們更靈活和有效率地操作資料。指標轉換是指在不同類型之間進行指標操作的過程,本文將透過具體的實例來學習Golang中指標轉換的最佳實踐。 1.基本概念在Golang中,每個變數都有一個位址,位址就是變數在記憶體中的位置。

See all articles