開發與維運

JavaScript常見名詞–《前端那些事》

1原型prototype

  1. 簡介

​ 在構造函數中有一個屬性叫 prototype

prototype是一個對象屬性,其屬性值為對象,稱為原型對象
可以通過prototype來添加新的屬性和方法,此時所有該構造函數創建的對象都會具有這些屬性和方法
由該構造函數創建的對象會默認鏈接到該屬性上
​ 語法:

構造函數.prototype.屬性名=值;
構造函數.prototype.方法名=function(){方法定義體};
​ 訪問對象屬性的查找順序:

首先在當前對象中查找對應的實例屬性
如果沒有,就會到該對象關聯的構造函數的prototype屬性中查找,即到原型對象中查找
​ 作用:

對象間共享數據
為"類"(系統內置或自定義)增加新的屬性、方法,並且新增內容對於當前頁面中已經創建的對象也有效

  1. proto_ _

​ prototype是一個隱藏屬性,於是為每個對象提供一個叫__proto__的屬性

對象的__proto__ 與創建它的構造函數的 prototype 本質上是同一個東西
__proto__是對象的屬性,是站在對象的角度,來討論其原型對象
prototype是構造函數的屬性,是站在構造函數的角度,來討論其原型屬性
注:由於__proto__是非標準屬性,因此一般不建議使用

  1. 對象的類型

​ 判斷數據的類型:

使用typeof

可以判斷任意變量的類型

判斷對象的類型時總是返回object

使用instanceof

只能判斷對象是否為某種類型,需要指定判斷的目標數據類型,無法獲取對象的類型名稱

語法:對象 instanceof 數據類型,返回boolean值

​ 獲取對象的類型:

函數有一個name屬性,通過該屬性可以獲取函數的名稱
構造函數的名稱就是對象的類型

  1. 原型鏈

​ 任何對象都有其原型對象,原型對象也有原型對象,對象的原型對象一直往上找,直到null為止

​ 在這一過程中,有一個 Object 類型的,有很多方法,它就是 Object.prototype,位於頂層

  1. call和apply

​ 作用:以某個對象的身份來調用另一個對象的方法

​ 語法:

call:方法.call(對象,參數1,參數2...)
apply:方法.apply(對象,參數)
​ 區別:傳參的方式有所不同

第一個參數是相同的,都表示由該對象來調用執行

後面的參數不同

call是逐個傳參,後面參數可以有多個,逗號隔開

apply是以數組形式傳參,後面參數只能有一個,會自動拆分為多個元素傳入

  1. 繼承

​ JS中實現繼承的三種方式:

對象冒充繼承,也稱為構造繼承

核心:使用call,以對象冒充的形式調用父類的構造函數,相當於是複製父類的實例屬性給子類

缺點:只能繼承父類構造函數中的屬性和方法,無法繼承原型中的屬性和方法

原型鏈繼承

核心:使用prototype,將父類的實例作為子類的原型

缺點:創建子類實例時,無法向父類構造函數傳參,導致繼承的父類屬性沒有值

組合繼承

對象冒充+原型鏈
7閉包
​ 閉包是JS中特有的現象,如何理解閉包?

在一個函數內部又定義了一個函數,這個定義在內部的函數,就是閉包
閉包就是能夠讀取其他函數內部變量的函數
閉包是在某個作用域內定義的函數,該函數可以訪問這個作用域內的所有變量
從作用上來說,閉包就是將函數內部和函數外部連接起來的一座橋樑
​ 閉包的用途

在函數的外部,可以讀取到函數內部的變量
讓變量的值始終保存在內存中(不會被垃圾回收器回收)
​ 如果內部函數使用外部函數的變量,在外部函數執行完成之前變量會有改變時,內部只能獲取最後改變的值,無法獲取定義時的值,就會產生閉包

​ 解決方式

不在函數內部定義函數,將函數定義在外面,在函數內部調用
為元素附加屬性,用來存儲變量
使用let來定義變量

  1. JSON

8.1 JSON簡介
​ JavaScript Object Notation 是一種輕量級的數據交換格式,用於表示JavaScript對象的一種方式

​ 採用與編程語言無關的文本格式,易於閱讀和編寫,同時也易於解析和生成。

8.2 基本用法
​ 語法:{"屬性名":屬性值,"屬性名":屬性值....}

​ 注意:

JSON結構是由一系列的鍵值對所組成,稱為JSON對象
屬性名使用雙引號引起來
JSON和對象字面量的區別:JSON的屬性必須加雙引號,而對象字面量可以不加
​ 使用:

簡單的JSON對象
複合屬性,屬性的值為JSON對象
JSON對象的集合

  1. 事件操作

9.1 事件流
​ 概念:當一個HTML元素產生事件時,該事件會在當前元素與根元素之間按特定的順序傳播,所有經過的節點都會收到該事件並執行,這個傳播過程就是DOM事件流。

​ 分類:事件冒泡、事件捕獲

9.2 事件冒泡/事件捕獲
​ 事件冒泡:當一個元素上的事件被觸發時,事件從事件源開始,往上冒泡直到頁面的根元素,這一過程被稱為事件冒泡(默認方式)

​ 事件捕獲:當一個元素上的事件被觸發時,事件從頁面的根元素開始,往下直到事件目標元素,這一過程被稱為事件捕獲

​ 阻止事件冒泡 :event.stopPropagation()

9.3 事件代理/事件委託
​ 概念:利用事件冒泡/事件捕獲機制,通過給父元素綁定事件,從而實現對所有子元素的事件管理,無需為每個子元素綁定事件

​ 優點:1.減少事件註冊,降低內存佔用

​ 2.新增元素時實現動態綁定事件

9.4 事件默認行為
​ 概念:當一個事件發生時瀏覽器自己會默認做的事情,如:點擊鏈接時默認會跳轉,右鍵點擊時默認會彈出菜單

​ 阻止事件的默認行為:e.preventDefault();

Leave a Reply

Your email address will not be published. Required fields are marked *