原型 原型對象 原型鏈

在面向開發對象開發過程中對每一個實例添加方法,會使每一個對象都存在該添加方法造成空間浪費

通過對原型添加公共的屬性或方法,使所有實例對象都可訪問

原型為了共享公共的成員 ?prototype

原型: JS為每個構造函數提供一個屬性prototype(原型),它的值是一個對象,prototype也叫原型對象

constructor屬性,原型對象的默認屬性->原型對象的構造函數

function Cat(name, age) {this.name = namethis.age = age
}Cat.prototype.eat = function () {console.log('貓吃老鼠')}
Cat.prototype.nation = 'china'const cat1 = new Cat('加菲貓', 3) // {name:  '',age: ,eat}const cat2 = new Cat('銀漸層', 4) // {name: '',age: ,eat() {}}console.log(cat1.age)console.log(cat1.nation)cat1.eat()cat2.eat()console.log(cat1.eat === cat2.eat) // true
console.log(Cat.prototype)console.log(Cat.prototype.constructor === Cat) // true
 console.log(Array.prototype.constructor === Array) //  trueconst arr = [] //  new  Object()console.log(arr.constructor === Array) // trueconsole.log(arr.constructor === Array.prototype.constructor) // trueconsole.log(arr.constructor) // 訪問arr數組對象的constructor,會到原型去訪問console.log(Object.prototype.constructor) // Object ;const obj = {}console.log(obj.constructor) // Objectconst obj2 = { a: 1 }console.log(obj.constructor === obj2.constructor) // true

?訪問對象成員的原則: 先查找自己身上有沒有,有的話就使用,沒有去原型查找

?prototype->原型對象 __proto__ 原型

constructor屬性,原型對象的默認屬性->原型對象的構造函數

每個對象都有一個__proto__屬性,指向原型對象

 function Person(name, age) {this.name = namethis.age = age}Person.prototype.say = function () {console.log('saying')}const p1 = new Person('小明', 20)console.log(p1.name)p1.say()console.log(p1.__proto__)console.log(p1.constructor.prototype.constructor)console.log([].__proto__) // Array.prototype  {constructor: Array,...}console.log([].__proto__.constructor) // Arrayconsole.log([].constructor) // Arrayconsole.log('123'.constructor) //  Stringconsole.log(Array.prototype) const arr   = [1,2,3]arr.push(4)

數組拓展方法

 Array.prototype.getSum = function () {console.log(this) // this 指向getSum調用著->實例對象let sum = 0this.forEach(function (item) {sum += item})return sum}const arr = [1, 2, 3]const arr2 = [10, 3, 4]arr2.getSum()const res = arr2.getSum()console.log(res)

對象訪問成員的機制

?1 ?首先查找自身有沒有,有就就近原則使用

?2 ?自身沒有該成員,通過__proto__找到原型對象,看原型對象上有沒有,有就執行

? 3 ?假如原型對象上也沒有,再找原型對象的__proto__ ,一直找到Object.prototype

?4 ?一直找到Object.prototype,找不到就undefined

每一個實例對象又有一個proto屬性,指向的構造函數的原型對象,構造函數的原型對象也是一個對象,也有proto屬性,這樣一層一層往上找就形成了原型鏈

Date.now() 靜態方法

Array.isArray

Array.from

?str.substring()

?Object.assign

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/168112.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168112.shtml
英文地址,請注明出處:http://en.pswp.cn/news/168112.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PostgreSQL數據庫初接觸

PostgreSQL默認端口為5432 windows下服務名為PostgreSQL-x64-10 10為版本 進程名為pg-ctl.exe 備份數據庫命令: pg_dump -h localhost -p 5432 -U postgres -f d:\20231124.dmp tcsl7//tcsl7為數據庫名 開始用-d 指定數據庫,后來提示沒-d參數 還…

在服務器復用他人的anaconda3(免安裝)

在服務器復用他人的anaconda3 1. 復制他人的anaconda3文件夾2. 修改配置文件3. 修改環境路徑和包路徑 1. 復制他人的anaconda3文件夾 cp -r /home/xxx/anaconda3 /home/your_username2. 修改配置文件 vim anaconda3/etc/profile.d/conda.sh # 替換原來的用戶名為自己的用戶名…

SELinux零知識學習二十八、SELinux策略語言之類型強制(13)

接前一篇文章:SELinux零知識學習二十七、SELinux策略語言之類型強制(12) 二、SELinux策略語言之類型強制 4. 類型規則 類型規則在創建客體或在運行過程中重新標記時指定其默認類型。在策略語言中定義了兩個類型規則: type_transtition在域轉換過程中標記行為發生時以及創…

jQuery 3.0 新增了哪些特性?(jQuery 3 所引入的那些最重要的變化)

文章目錄 前言簡介新增特性Use of requestAnimationFrame() for Animationsunwrap() 方法 有變更的特性data() 方法Deferred 對象SVG 文檔 已廢棄、已移除的方法和屬性廢棄 bind()、unbind()、delegate() 和 undelegate() 方法移除 load()、unload() 和 error() 方法移除 conte…

計算機應用基礎_錯題集_OutLook操作題_操作系統應用題_電子表格---網絡教育統考工作筆記005

6、(說明:考生單擊窗口下方的“打開[Outlook]應用程序”啟動Outlook) 按以下要求保存草稿。 收件人:test_xiao_ming@163.com

深眸科技聚焦AI機器視覺檢測,驅動3C電子行業集成創新實現新需求

隨著消費的升級及國家政策的助推,國內3C電子市場不斷擴大,行業實現高速發展。近年來,3C電子產品持續迭代,生產工藝也逐漸復雜化,相關生產線定位組裝、零部件檢測、整機產品檢測等環節,亟需使用具備較強適應…

C語言-字符串逆序

輸入一個字符串,對該字符串進行逆序,輸出逆序后的字符串。 輸入格式: 輸入在一行中給出一個不超過80個字符長度的、以回車結束的非空字符串。 輸出格式: 在一行中輸出逆序后的字符串。 輸入樣例: Hello World…

云原生系列Go語言篇-編寫測試Part 2

基準測試 確定代碼是快或慢非常復雜。我們不用自己計算,應使用Go測試框架內置的基準測試。下面來看??第15章的GitHub代碼庫??sample_code/bench目錄下的函數: func FileLen(f string, bufsize int) (int, error) {file, err : os.Open(f)if err ! …

【XSLVGL2.0】如何設置壁紙

XSLVGL2.0 開發手冊 XSLVGL2.0 Brief 1、概述2、設置方法 1、概述 設置壁紙使用的是LVGL默認的方式。一般而言,若非必要,建議不要去設置此功能,此功能對性能影響頗大。 2、設置方法 在main.c的 static int InitLvgl(void *cookie) 函數中…

舉個栗子!Quick BI 技巧(4):創建面積圖

面積圖又叫區域圖,是在折線圖的基礎之上形成的, 它將折線圖中折線與自變量坐標軸之間的區域使用顏色或者紋理填充,這樣一個填充區域我們叫做面積,顏色的填充也可以更好的突出趨勢信息。 有數據粉好奇如何使用 Quick BI 來制作面積圖&#xf…

NVMe-oF E-JBOF設計解析:WD RapidFlex網卡、OpenFlex Data24

OpenFlex Data24 NVMe-oF Storage Platform WD的SN840 NVMeSSD新品并沒有太吸引我注意,因為它還是PCIe 3.0接口的,要知道Intel的PCIe 4.0 SSD都已經推出了。 但上面這個NVMe-oF(NVMe over Fabric)EBOF(區別于普通JBO…

FPGA程序前仿真和后仿真問題處理

參考鏈接:FPGA程序前仿真和后仿真問題處理 - 知乎

css三角,鼠標樣式,溢出文字

目錄 css三角 鼠標樣式 例子:頁碼模塊 溢出文字表示方式 margin負值運用 css三角強化 css三角 css三角中:line-height:0和font-size:0是防止兼容性的問題 jd {position: relative;width: 120px;height: 249px;background-…

【React】useReducer

讓 React 管理多個相對關聯的狀態數據 import { useReducer } from "react" // 1. 定義reducer函數,根據不同的action返回不同的狀態 function reducer(state, action) {switch (action.type) {case ADD:return state action.payloadcase SUB:return st…

Python與設計模式--原型模式

4-Python與設計模式–原型模式 一、圖層 大家如果用過類似于Photoshop的平面設計軟件,一定都知道圖層的概念。圖層概念的提出, 使得設計、圖形修改等操作更加便利。設計師既可以修改和繪制當前圖像對象,又可以保留其它 圖像對象,…

在 Ubuntu 上安裝最新版的 Calibre

目錄 前言 方法1:從 Ubuntu 的倉庫安裝 Calibre 卸載 Calibre 方法2:獲取最新版本的 Calibre 卸載 Calibre 結語 前言 Calibre 是一款自由開源的電子書軟件。下面介紹如何在 Ubuntu Linux 上安裝它。 作為電子書管理的瑞士軍刀,Calibre …

線程-Thread類及常見方法

目錄 一、創建線程 1.繼承 Thread 類 2. 實現 Runnable 接口 3.匿名內部類創建 Thread 子類對象 4. 匿名內部類創建 Runnable 子類對象 5. lambda 表達式創建 Runnable 子類對象 二、Thread 類及常見方法 2.1 Thread 的常見構造方法 2.2 Thread 的幾個常見屬性 2.3 啟…

C++初級項目webserver項目流程介紹(2)

一、引言 C的webserver項目是自己在學完網絡編程后根據網課的內容做的一個初級的網絡編程項目。 這個項目的效果是可以在瀏覽器通過輸入網絡IP地址和端口,然后打開對應的文件目錄 效果如下: 也可以打開文件夾后點擊目錄,打開到對應的文件夾…

Vue中項目進行文件壓縮與解壓縮 (接口返回文件的url壓縮包前端解析并展示出來,保存的時候在壓縮后放到接口入參進行保存)

安裝 npm install pako在Vue組件中引入pako: import pako from pako;接口返回的url是這個字段 tableSsjsonUrl 其實打開就是壓縮包const source await tableFileUrl ({ id: this.$route.query.id}); if(source.code 0) {this.titleName source.data.tableNam…

ES之x-pack-core-7.14.2許可證修改為白金版

X-Pack是什么 X-pack是elasticsearch的一個擴展包,將安全,警告,監視,圖形和報告功能捆綁在一個易于安裝的軟件包中,雖然x-pack被設計為一個無縫的工作,但是你可以輕松的啟用或者關閉一些功能。 主要分一下步…