您的位置:首頁技術文章
文章詳情頁

javascript - 這不是對象字面量函數嗎?為什么要new初始化?

瀏覽:61日期:2023-03-12 18:43:43

問題描述

javascript - 這不是對象字面量函數嗎?為什么要new初始化?

javascript - 這不是對象字面量函數嗎?為什么要new初始化?

我記得這個不是構造函數啊,為什么this、new這些都跟構造函數用法一樣?

問題解答

回答1:

javascript 中的任何函數只要用 new 關鍵字調用,它都可以被稱作 構造函數。

當使用 new 關鍵字調用函數時,函數內部會隱式地聲明一個對象,然后把這個對象賦給 this,最后再隱式地返回 this. 使用 new 關鍵字調用樓主的 book 方法時,就相當于以下過程。

function Book(id, bookname){ var o = new Object(); o.id = id; o.bookname = bookname; return o;}var b = Book(123,’javascript高級程序設計’);

這里的 o 其實就是我們平時看到的 this 對象。

回答2:

javascript 里面沒有類,也沒有構造函數。

function Book (){}// Book 是一個函數typeof Book'function'// Book 是 FunctionBook instanceof Functiontrue// Book 是 ObjectBook instanceof Objecttrue

使用 new 可以創建對象

var book = new Book()// book 是一個對象typeof book'object'// book 不是 Function 的實例book instanceof Functionfalse// book 是 Object 的實例book instanceof Objecttrue// book 是 Book 的實例book instanceof Booktrue

雖然 js 中沒有構造函數,但是 MDN 文檔中也使用了這個詞:https://developer.mozilla.org...

當代碼 new foo(...) 執行時:

一個新對象被創建。它繼承自 foo.prototype.

構造函數 foo 被執行。執行的時候,相應的傳參會被傳入,同時上下文(this)會被指定為這個新實例。new foo 等同于 new foo(), 只能用在不傳遞任何參數的情況。

如果構造函數返回了一個“對象”,那么這個對象會取代整個new出來的結果。如果構造函數沒有返回對象,那么new出來的結果為步驟1創建的對象,ps:一般情況下構造函數不返回任何值,不過用戶如果想覆蓋這個返回值,可以自己選擇返回一個普通對象來覆蓋。當然,返回數組也會覆蓋,因為數組也是對象。

即使 ES6 增加了類,也只是語法糖:

class Book{}typeof Book'function'回答3:

你理解錯了構造函數的概念。

實際上,js里不應該有‘構造函數’這一說,而應該理解為函數的構造方法。意思是,任何函數都可以拿來new一個,任何函數都可以叫做‘構造函數’。你在寫所謂‘構造函數’的時候,有發現它和普通函數有什么區別嗎,并沒有吧,他們就是普通函數。

以上,es6箭頭函數除外。

回答4:

js里面每個函數都是相當于一個構造函數(除了真ES6箭頭函數)。哎,神奇的js!

標簽: JavaScript
相關文章:
国产综合久久一区二区三区