JS三座大山再學習 一 原型和原型鏈

2022-07-16 04:39:11 字數 1488 閱讀 6789

本文已發布在西瓜君的個人部落格,原文傳送門

西瓜君之前學習了js的基礎知識與三座大山,但之後工作中沒怎麼用,印象不太深刻,這次打算再重學一下,打牢基礎。衝鴨~~

js實現繼承的方式是通過原型和原型鏈實現的,js中沒有類(此處指es5,es6中加上了class語法糖)

每個函式都有prototype(原型)屬性,這個屬性是乙個指標,指向乙個物件,這個物件的用途是包含特定型別的所有例項共享的屬性和方法,即這個原型物件是用來給例項共享屬性和方法的。

而每個例項內部都有乙個指向原型物件的指標(proto)。

所有引用型別(陣列、物件、函式),都具有物件特性,及可自由擴充套件屬性

舉個栗子

var obj =

console.log(obj) //

obj.like = '宗介'

console.log(obj) //

所有的引用型別都有乙個__proto__屬性,屬性值是乙個普通物件

所有的函式都有乙個prototype屬性,屬性值是乙個普通物件

所有的引用型別的__proto__指向它建構函式的prototype屬性值

當試圖獲取乙個物件的某個屬性時,如果這個物件本身沒有這個屬性,那麼他會去它的__proto__(即它建構函式的prototype)去找

理解:每乙個引用型別都有__proto__,每乙個函式都有prototype,引用型別的__proto__與它建構函式的prototype指向同乙個物件;呼叫引用型別時,如果其本身並沒有呼叫的方法或屬性,就會去__proto__(也就是它建構函式的prototype)去找,沒有的話會繼續找prototype的__proto__,到頂級object的原型指向null為止

function foo (name, age) 

foo.prototype.print = function ()

var f = new foo('波妞')

f.print() // 波妞

原型鏈繼承的小栗子

function elem(id) 

elem.prototype.html = function (val) else

}elem.prototype.on = function (type, fn)

var div1 = new elem('div1')

console.log(div1. html())

如有錯誤,請斧正

以上

壓在redis身上的三座大山

三座大山分別是快取穿透,快取擊穿,快取雪崩 快取穿透 查詢引數是無效的key,這個key在redis沒有,然後取資料庫查也查不到,導致無用查詢。解決方法有兩個 1是value設定成null。2是使用布隆過濾器,布隆過濾器可以看出乙個陣列,然後我們對key進行多次不同hash運算,然後對長度取模,對應...

前端面試送命題 JS三座大山

說到原型,就不得不提一下建構函式,首先我們看下面乙個簡單的例子 function dog name,age let dog1 new dog 哈士奇 3 let dog2 new dog 泰迪 2 首先創造空的物件,再讓 this 指向這個物件,通過 this.name 進行賦值,最終返回 this...

服裝企業搞資訊化前面的「三座大山」

服裝行業作為中國具有世界競爭力的行業之一,其領先地位在很大程度上得益於國內極為低廉的勞動力成本優勢。但隨著近年來國內物價的不斷 當勞動力成本優勢逐漸喪失的時候,如何在管理模式和資訊化應用方面進行創新就成為了擺在我們面前的問題。但由於國內服裝企業在對資訊化應用的認識以及人才 技術等方面還普遍存在瓶頸,...