javascript原型與原型鏈個人理解

来源:https://www.cnblogs.com/maxiansheng/archive/2019/08/05/11303126.html
-Advertisement-
Play Games

想瞭解原型和原型鏈,我覺得首先我們得知道javascript里有一個Object 與 Function,它倆都是構造函數,當然函數也是一個對象。我們列印Object 與 Function看一下, 那麼這個Object 與 Function 之間有何關係與區別呢?首先您只需要記住: 1. 所有普通對象 ...


想瞭解原型和原型鏈,我覺得首先我們得知道javascript里有一個Object 與 Function,它倆都是構造函數,當然函數也是一個對象。我們列印Object 與 Function看一下,

console.log(Function)

console.log(Object)

那麼這個Object 與 Function 之間有何關係與區別呢?首先您只需要記住:

1. 所有普通對象都是 Object 的實例(也就是說Object是所有普通對象的爸爸);

2. 所有普通函數都是 Function 的實例(也就是說Function是所有普通函數的爸爸);

3. Function是 Object 的實例;(Object是所有對象的爸爸)

 

構造函數與原型對象的區別:

 Object是構造函數,而Object.prototype是構造函數的原型對象。構造函數自身的屬性和方法無法被共用,而原型對象的屬性和方法可以被所有實例對象所共用。

 

其次,constructor屬性是原型對象上的一個屬性,可以被所有實例對象所共用。要註意的是,prototype是構造函數的屬性,而constructor則是構造函數的prototype屬性所指向的那個對象,也就是原型對象的屬性。由於constructor屬性是一種原型對象和構造函數的關係,所以在修改原型對象的時候,一定要註意constructor的指向問題。

 

 

接下來我們說重點,javascript里的__proto__ 和 prototype 屬性。

1. 所有的對象都有__proto__ 屬性,可通過__proto__屬性來訪問這個對象的原型,而 __proto__ 指向的是它原型對象的prototype 屬性(對象沒有prototype屬性);

2. 所有的構造函數都有一個prototype 和 __proto__ 屬性,而該函數的prototype屬性指向的是它原型對象上的constructor屬性。

 

代碼實例:

複製代碼
var A = function () {} // 申明一個函數對象A;

var B = new A(); // 為A創建一個實例B;

console.log("A.prototype:", A.prototype);

console.log("B.__proto__:", B.__proto__);

console.log(A.prototype === B.__proto__);
複製代碼

 

 

 

Prototype 的作用:

可以為原型的實例設置公用的屬性或方法;

複製代碼
var A = function () {

    this.ary1 = [];

}

var B = new A();

var C = new A();

B.ary1.push(1);

C.ary1.push(2);
console.log(B.ary1)    

console.log(C.ary1)   
複製代碼 複製代碼
A.prototype.ary2 = [];

B.ary2.push(1);

C.ary2.push(2);

console.log(B.ary2); 
 

最後總結下什麼是原型鏈:

所有的對象都有一個__proto__屬性,我們通過對象的__proto__屬性一層層的向上訪問,最終會得到值null;那麼我們訪問的整個路徑就是這個對象的原型鏈。

(感覺個人理解還是不夠深刻,這裡只是記錄一下自己目前對於原型鏈的理解,多多指教!)

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 項目開發中 ajax 是不可缺少的,一個好的封裝可以減少我們很多的重覆代碼,維護也更方便。在 vue 開發中我們用的比較多的就是 axios。下麵代碼是項目中用到的 axios 的封裝。 http.js 註: 1. 上面代碼依賴了 elementui 框架的 Message 組建,用於提示錯誤消息 ...
  • 1. javascript的typeof返回哪些數據類型. 答案:string,boolean,number,undefined,function,object 2. 例舉3種強制類型轉換和2種隱式類型轉換? 答案:強制(parseInt,parseFloat,number) 隱式(== ) 3. ...
  • 深度優先遍歷(Depth-First-Search),是搜索演算法的一種,它沿著樹的深度遍歷樹的節點,儘可能深地搜索樹的分支。當節點v的所有邊都已被探尋過,將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已探尋源節點到其他所有節點為止,如果還有未被髮現的節點,則選擇其中一個未被髮現的節點為源節... ...
  • 1、新的html5文件類型,僅需申明在html的第一行,即 <!DOCTYPE html> 2、圖形元素 figure ,將<figure>與<figcaption>相結合,使圖片標題與圖片相搭配 3、不需要為鏈接和腳本標簽添加類型的屬性 4、h5中不需要用引號將屬性包裹起來 5、使得內容可編輯。" ...
  • 再不學React就真的跟不上大前端的形式了,目前幾乎所有前端的招聘條件都是精通React者優先,看看拉勾網的React薪資,都是15K-20K,這個暑假,必須動起來了。 ...
  • 來自:https://www.cnblogs.com/myfirstboke/p/9150809.html 侵刪 ...
  • 第一章 JavaScript基礎 --1、JavaScript是一種基於對象和事件驅動的,並具有安全性能的腳本語言。--2、JavaScript的特點: -1、JavaScript主要用來在HTML頁面中添加交互行為 -2、JavaScript是一種腳本語言,語法和Java類似 -3、JavaScr ...
  • 08.05自我總結 一.顯示方式 1.display 常用的三種方式 2.vertical align 文本垂直對齊方式: |` top bottom` ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...