淺談對js原型的理解

来源:https://www.cnblogs.com/nicknailo/archive/2018/03/13/8561597.html
-Advertisement-
Play Games

一. 在JavaScript中,一切皆對象,每個對象都有一個原型對象(prototype),而指向該原型對象的內部指針則是__proto__。當我們對對象進行for in 或者for of遍歷時,就會通過__proto__依次遍歷對象關聯的所有對象。這就是原型鏈,遍歷所有對象的父對象直到object ...


  一.  在JavaScript中,一切皆對象,每個對象都有一個原型對象(prototype),而指向該原型對象的內部指針則是__proto__。當我們對對象進行for in 或者for of遍歷時,就會通過__proto__依次遍歷對象關聯的所有對象。這就是原型鏈,遍歷所有對象的父對象直到object直至null。

function Person(name,work){
    this.name = name;
    this.work = work;    
}
Person.prototype.show = function(){
    console.log(this.name);
}
var person = new Person('nicknailo','全棧開發');
console.log(person.__proto__ === Person.prototype); //true
console.log(Person.prototype.__proto__);//Object 或者{}
console.log(person.__proto__.__proto__.__proto__);//null
console.log(Person.prototype);//Person { show: [Function] }

       person對象的原型指向 Person.prototype,Person.prototype指向object,object 指向 null。蘊含了一個哲理,無中生有。

  二.

JavaScript原型鏈分析圖

這是一張描述了Object、Function以及一個函數實例Foo他們之間原型之間聯繫。如果理解了上面的概念,這張圖是不難讀懂。

Function.prototype.proto 指向了 Object.prototype,這說明Function.prototype 是一個 Object實例,那麼應當是先有的Object再有Function。

但是Object.prototype.constructor.proto 又指向了 Function.prototype。這樣看來,沒有Function,Object也不能創建實例。

 

 

  三.Person.prototype只是對象的原型上(constructor)擴展的屬性。

var animal = function(){};
var dog = function(){};

animal.price = 2000;
dog.prototype = animal;
var tidy = new dog();
console.log(dog.price + " : dog.price");//undefined : dog.price
console.log(tidy.price + " : tidy.price"); //2000 : tidy.price

  上述代碼可以看出來,實例tidy只與原型對象dog.prototype存在關聯,上面的代碼可以看成是  dog.prototype.price = 2000;


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

-Advertisement-
Play Games
更多相關文章
  • 在實際項目開發過程中,發現字元串使用頻率還是非常高的,NSString提供了很多相關的API,但是在開發過程中發現很多業務功能都是相同的。因此根據在開發過程中遇到的字元串使用場景,進行了簡單封裝。具體代碼如下: NSString+Category.h 代碼: NSString+Category.m ...
  • 目標是做一個牛叉的日曆,但是要先一步步來,先看效果圖 簡單一點說就是吧自定義view平分成七個部分,每個部分寫上一個字,然後自定義view可以跟隨手指滑動,併在抬起手指後恢復到初始位置,並且點擊view可以判斷出點的是哪個view(都是用坐標算出來) 代碼也簡單,看一下就ok 萬事開頭難,估計日曆系 ...
  • public class HightLightTextView extends TextView { // 存儲view的寬度 private int mTextViewWidth = 0; // 畫筆 private Paint mPaint; // 線性渲染 private LinearGrad... ...
  • css基本知識 我們先看一個小例子: 我們可以看到我們在div中加了style,裡面有background-color,height等屬性,這樣就使的原本什麼都沒有的div添加了背景色高度等。 css的編寫 在標簽上設置style屬性:width,height,background....... 寫 ...
  • React 進入文件APP.js,首先添加react-redux插件,使用react-redux的Provider模塊提供管道的儲存功能,傳入管道的屬性必須是store。 然而store參數是一個模塊功能,此模塊由redux的三個模塊組成,分別是創造、截獲、組成三個方法,createStore, a ...
  • 一 . ES6數組去重 1.拓展運算符(...)內部使用for...of迴圈, Set數據結構,它類似於數組,其成員的值都是唯一的. var arr = [3,5,6,5,4,6,9] console.log(...new Set(arr)) // [3,5,6,4,9] 2.利用Array.fro ...
  • 屬性: float 浮動 浮動的內容用div包起來,給div設置寬高 clear 清除浮動。 box-sizing 標準模式下的盒模型 content-box:(預設屬性) padding和border不被包含在定義的width和height之內。對象的實際寬度等於設置的width值和border、 ...
  • 1.去重 for(var q = 0;q<jsonArr.length;q++){ for(var e=0;e<jsonArr[q].data.length;e++){ var matchCode = jsonArr[q].data[e]; var chua = jsonArr[q].jsonObj ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...