簡體   English   中英

Javascript 手冊:`Array.prototype.includes()` 與 `Array.includes()`

[英]Javascript Manual: `Array.prototype.includes()` vs. `Array.includes()`

傳入的“菜鳥”問題:

Javascript 在 arrays 上有一個includes方法。

看起來像:

Array.includes()

但是當我 go 到Javascript 手冊來理解這種方法時,該頁面上的標題(出於適當的技術原因,我意識到)是:

Array.prototype.includes()

Javascript 手冊中的類似內容導致我根本不喜歡該手冊(唉,我更依賴 W3Schools 而不是手冊)。

但是,我真的很想學習解釋手冊。

所以,我的問題是:當實際用法看起來像: Array.includes()時,在文檔中包含.prototype一詞的意義是什么Array.prototype.includes() ) ?

(此外,如果有人對我如何提高對 Javascript 官方手冊的理解有任何建議,我將不勝感激。)

所以,我的問題是:當實際用法看起來像: Array.includes()時,在文檔中包含.prototype一詞的意義是什么Array.prototype.includes() ) ?

重要的是實際用法看起來不像Array.includes()

 Array.includes();

這將引發TypeError: Array.includes is not a function因為Array.includes doesn't exist 訪問不存在的屬性計算結果為undefined ,因此Array.includes計算結果為undefined ,因此Array.includes()試圖調用undefined ,就像 function 一樣。

你可以在這里看到它的作用:

 console.log(Array.includes); undefined();

includes()方法是在Array全局 object 的原型上定義的,因此您可以在Array實例上調用它:

 [].includes();

可以看到[].includes是一個 function:

 console.log([].includes);

將此與Array.from進行比較,后者是在Array構造函數上定義的,而不是在Array原型上:

 console.log(Array.from);

你可以像這樣使用它:

 console.log(Array.from({ length: 10 }, (_, num) => num << 2));

如果文檔說Array.includes()你會像這樣輸入它(示例):

Array.includes(1);

相反,它說Array.prototype.includes()這意味着它不是在Array類型本身上調用的,而是在它的一個實例上調用的。 所以在這種情況下,你會寫:

const numbers = [1, 2, 3];
numbers.includes(1);

JavaScript 通常被描述為基於原型的語言,原型就是 inheritance 在 JavaScript 中的工作方式。

原型是什么意思?

我們倆都同意 JavaScript 中的幾乎所有內容都是 object (我說“幾乎”,因為原語不被視為對象)很酷嗎? 好的,現在 JS 中的每個 Object 都有一個名為 [[Prototype]] 的內部屬性,內部我的意思是您不能像訪問 JS 對象的屬性一樣直接訪問它。

If we want to know the prototype of an object that we have created we either pass the instance of our object to Object.getPrototypeOf or through the __proto__ property of our object

例如:

let myArray = [1,2,3,4];
console.log(myArray.__proto__)
// Expected output: Array []

如果您擴展生成的 object,您會從上面的小代碼片段中找到您所詢問的 include 方法以及您在 JS 代碼中創建的任何數組上可用的所有方法。 那是因為據說 myArray 和 JavaScript 中的所有 arrays 共享 Array.prototype 上定義的屬性和方法!

現在,如果您再次查看上面代碼片段中生成的 object 的方法,您會注意到一個名為構造函數的方法,它在 Array.prototype 上定義,就像 include 和其他方法一樣

這就是在創建 JavaScript Array 對象的實例時調用的 function!

JavaScript 陣列 object 是什么意思? It's a global JavaScript object that is used in the construction of arrays, it's the Array in Array.prototype.includes() (you may call it a class for convenience buuuuut classes did not exist practically until the release of ES6...before then JS中沒有class這樣的東西)

因此,為了簡單起見,將 Array 視為全局 object,所有 JS arrays 都是其實例,並考慮 Array。 proto因為它是封裝了所有實例共享的屬性和方法的原型!

關於文檔,能夠閱讀文檔並對所閱讀的內容有相當的了解實際上是一件好事,所以我相信你很好!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM