真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JavaScript構(gòu)造函數(shù)和"new"操作符是什么

這篇文章將為大家詳細(xì)講解有關(guān)JavaScript 構(gòu)造函數(shù)和 "new" 操作符是什么,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出橋東免費(fèi)做網(wǎng)站回饋大家。

構(gòu)造器和操作符 "new"

常規(guī)的 {...} 語法允許創(chuàng)建一個(gè)對象。但是我們經(jīng)常需要?jiǎng)?chuàng)建許多類似的對象,例如多個(gè)用戶或菜單項(xiàng)等。

這可以使用構(gòu)造函數(shù)和 "new" 操作符來實(shí)現(xiàn)。

構(gòu)造函數(shù)

構(gòu)造函數(shù)在技術(shù)上是常規(guī)函數(shù)。不過有兩個(gè)約定:

  1. 它們的命名以大寫字母開頭。
  2. 它們只能由 "new" 操作符來執(zhí)行。

例如:

function User(name) {  this.name = name;  this.isAdmin = false;
}let user = new User("Jack");

alert(user.name); // Jackalert(user.isAdmin); // false復(fù)制代碼

當(dāng)一個(gè)函數(shù)被使用 new 操作符執(zhí)行時(shí),它按照以下步驟:

  1. 一個(gè)新的空對象被創(chuàng)建并分配給 this。
  2. 函數(shù)體執(zhí)行。通常它會修改 this,為其添加新的屬性。
  3. 返回 this 的值。

換句話說,new User(...) 做的就是類似的事情:

function User(name) {  // this = {};(隱式創(chuàng)建)

  // 添加屬性到 this
  this.name = name;  this.isAdmin = false;  // return this;(隱式返回)}復(fù)制代碼

所以 new User("Jack") 的結(jié)果是相同的對象:

let user = {  name: "Jack",  isAdmin: false};復(fù)制代碼

現(xiàn)在,如果我們想創(chuàng)建其他用戶,我們可以調(diào)用 new User("Ann")new User("Alice") 等。比每次都使用字面量創(chuàng)建要短得多,而且更易于閱讀。

這是構(gòu)造器的主要目的 —— 實(shí)現(xiàn)可重用的對象創(chuàng)建代碼。

讓我們再強(qiáng)調(diào)一遍 —— 從技術(shù)上講,任何函數(shù)都可以用作構(gòu)造器。即:任何函數(shù)都可以通過 new 來運(yùn)行,它會執(zhí)行上面的算法。“首字母大寫”是一個(gè)共同的約定,以明確表示一個(gè)函數(shù)將被使用 new 來運(yùn)行。

new function() { ... }

如果我們有許多行用于創(chuàng)建單個(gè)復(fù)雜對象的代碼,我們可以將它們封裝在構(gòu)造函數(shù)中,像這樣:

let user = new function() {  this.name = "John";  this.isAdmin = false;  // ……用于用戶創(chuàng)建的其他代碼
  // 也許是復(fù)雜的邏輯和語句
  // 局部變量等};復(fù)制代碼

構(gòu)造器不能被再次調(diào)用,因?yàn)樗槐4嬖谌魏蔚胤?,只是被?chuàng)建和調(diào)用。因此,這個(gè)技巧旨在封裝構(gòu)建單個(gè)對象的代碼,而無需將來重用。

構(gòu)造器模式測試:new.target

進(jìn)階內(nèi)容:

本節(jié)涉及的語法內(nèi)容很少使用,除非你想了解所有內(nèi)容,否則你可以直接跳過該語法。

在一個(gè)函數(shù)內(nèi)部,我們可以使用 new.target 屬性來檢查它是否被使用 new 進(jìn)行調(diào)用了。

對于常規(guī)調(diào)用,它為空,對于使用 new 的調(diào)用,則等于該函數(shù):

function User() {
  alert(new.target);
}// 不帶 "new":User(); // undefined// 帶 "new":new User(); // function User { ... }復(fù)制代碼

它可以被用在函數(shù)內(nèi)部,來判斷該函數(shù)是被通過 new 調(diào)用的“構(gòu)造器模式”,還是沒被通過 new 調(diào)用的“常規(guī)模式”。

我們也可以讓 new 調(diào)用和常規(guī)調(diào)用做相同的工作,像這樣:

function User(name) {  if (!new.target) { // 如果你沒有通過 new 運(yùn)行我
    return new User(name); // ……我會給你添加 new
  }  this.name = name;
}let john = User("John"); // 將調(diào)用重定向到新用戶alert(john.name); // John復(fù)制代碼

這種方法有時(shí)被用在庫中以使語法更加靈活。這樣人們在調(diào)用函數(shù)時(shí),無論是否使用了 new,程序都能工作。

不過,到處都使用它并不是一件好事,因?yàn)槭÷粤?new 使得很難觀察到代碼中正在發(fā)生什么。而通過 new 我們都可以知道這創(chuàng)建了一個(gè)新對象。

構(gòu)造器的 return

通常,構(gòu)造器沒有 return 語句。它們的任務(wù)是將所有必要的東西寫入 this,并自動(dòng)轉(zhuǎn)換為結(jié)果。

但是,如果這有一個(gè) return 語句,那么規(guī)則就簡單了:

  • 如果 return 返回的是一個(gè)對象,則返回這個(gè)對象,而不是 this。
  • 如果 return 返回的是一個(gè)原始類型,則忽略。

換句話說,帶有對象的 return 返回該對象,在所有其他情況下返回 this。

例如,這里 return 通過返回一個(gè)對象覆蓋 this

function BigUser() {  this.name = "John";  return { name: "Godzilla" };  // <-- 返回這個(gè)對象}

alert( new BigUser().name );  // Godzilla,得到了那個(gè)對象復(fù)制代碼

這里有一個(gè) return 為空的例子(或者我們可以在它之后放置一個(gè)原始類型,沒有什么影響):

function SmallUser() {  this.name = "John";  return; // <-- 返回 this}

alert( new SmallUser().name );  // John復(fù)制代碼

通常構(gòu)造器沒有 return 語句。這里我們主要為了完整性而提及返回對象的特殊行為。

省略括號

順便說一下,如果沒有參數(shù),我們可以省略 new 后的括號:

let user = new User; // <-- 沒有參數(shù)// 等同于let user = new User();復(fù)制代碼

這里省略括號不被認(rèn)為是一種“好風(fēng)格”,但是規(guī)范允許使用該語法。

構(gòu)造器中的方法

使用構(gòu)造函數(shù)來創(chuàng)建對象會帶來很大的靈活性。構(gòu)造函數(shù)可能有一些參數(shù),這些參數(shù)定義了如何構(gòu)造對象以及要放入什么。

當(dāng)然,我們不僅可以將屬性添加到 this 中,還可以添加方法。

例如,下面的 new User(name) 用給定的 name 和方法 sayHi 創(chuàng)建了一個(gè)對象:

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() { ... }
}
*/復(fù)制代碼

類 是用于創(chuàng)建復(fù)雜對象的一個(gè)更高級的語法,我們稍后會講到。

總結(jié)

  • 構(gòu)造函數(shù),或簡稱構(gòu)造器,就是常規(guī)函數(shù),但大家對于構(gòu)造器有個(gè)共同的約定,就是其命名首字母要大寫。
  • 構(gòu)造函數(shù)只能使用 new 來調(diào)用。這樣的調(diào)用意味著在開始時(shí)創(chuàng)建了空的 this,并在最后返回填充了值的 this

我們可以使用構(gòu)造函數(shù)來創(chuàng)建多個(gè)類似的對象。

JavaScript 為許多內(nèi)置的對象提供了構(gòu)造函數(shù):比如日期 Date、集合 Set 以及其他我們計(jì)劃學(xué)習(xí)的內(nèi)容。

對象,我們還會回來噠!

在本章中,我們只介紹了關(guān)于對象和構(gòu)造器的基礎(chǔ)知識。它們對于我們在下一章中,學(xué)習(xí)更多關(guān)于數(shù)據(jù)類型和函數(shù)的相關(guān)知識非常重要。

在我們學(xué)習(xí)了那些之后,我們將回到對象,在 info:prototypes 和 info:classes 章節(jié)中深入介紹它們。

作業(yè)題

先自己做題目再看答案。

1. 兩個(gè)函數(shù) — 一個(gè)對象

重要程度:????

是否可以創(chuàng)建像 new A()==new B() 這樣的函數(shù) AB?

function A() { ... }function B() { ... }let a = new A;let b = new B;

alert( a == b ); // true復(fù)制代碼

如果可以,請?zhí)峁┮粋€(gè)它們的代碼示例。

2. 創(chuàng)建 new Calculator

重要程度:??????????

創(chuàng)建一個(gè)構(gòu)造函數(shù) Calculator,它創(chuàng)建的對象中有三個(gè)方法:

  • read() 使用 prompt 請求兩個(gè)值并把它們記錄在對象的屬性中。
  • sum() 返回這些屬性的總和。
  • mul() 返回這些屬性的乘積。

例如:

let calculator = new Calculator();
calculator.read();

alert( "Sum=" + calculator.sum() );
alert( "Mul=" + calculator.mul() );復(fù)制代碼

3. 創(chuàng)建 new Accumulator

重要程度:??????????

創(chuàng)建一個(gè)構(gòu)造函數(shù) Accumulator(startingValue)

它創(chuàng)建的對象應(yīng)該:

  • 將“當(dāng)前 value”存儲在屬性 value 中。起始值被設(shè)置到構(gòu)造器 startingValue 的參數(shù)。
  • read() 方法應(yīng)該使用 prompt 來讀取一個(gè)新的數(shù)字,并將其添加到 value 中。

換句話說,value 屬性是所有用戶輸入值與初始值 startingValue 的總和。

下面是示例代碼:

let accumulator = new Accumulator(1); // 初始值 1accumulator.read(); // 添加用戶輸入的 valueaccumulator.read(); // 添加用戶輸入的 valuealert(accumulator.value); // 顯示這些值的總和復(fù)制代碼

關(guān)于JavaScript 構(gòu)造函數(shù)和 "new" 操作符是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


新聞名稱:JavaScript構(gòu)造函數(shù)和"new"操作符是什么
分享地址:http://weahome.cn/article/pohopo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部