談到原型,我們都知道最重要的兩個屬性就是__proto__和prototype,那麼他們到底有什麼關係又到底是什麼呢,這一篇看完相信你就會有一些理解了。
js中萬物皆物件,每個資料都會有乙個__proto__的屬性,這個屬性叫隱式原型。
乙個物件(obj)的 隱式原型(proto) 指向構造該物件(obj)的 建構函式(object())的原型屬性(object.prototype)。
這樣做的原因是為了能夠保證例項(obj)能夠訪問到在建構函式(object())的原型屬性(object.prototype)中定義的屬性和方法。
函式(function)是乙個特殊的物件,除了和其他物件一樣有上述__proto__屬性之外,還有自己特有的屬性——原型(prototype),這個屬性被描述成指標。
他指向乙個物件型別的資料,這個物件的用途就是包含所有 將來使用該函式 構造出來的可被共享的屬性和方法(我們把這個物件叫做原型物件)。
原型物件內也有乙個屬性,叫做constructor,這個屬性包含了乙個指標,指回原函式。
類似於arguments.callee,但是arguments只能在函式內部獲得,而函式原型物件內的constructor屬性,可以在任何能訪問到這個函式的位置使用。
1>建構函式 fn身上有屬性prototype為原型物件,原型物件內有constructor屬性指向當前prototype所在的建構函式fn
2>在new執行建構函式fn時,創造了乙個例項物件f,例項物件f的__proto__ 指向建構函式fn的 原型prototype
3>因為例項物件f的__proto__ 指向建構函式fn的 原型prototype,所以例項物件f可以間接訪問到fn原型prototype的方法
isprototypeof()函式,用於檢測兩個物件之間似乎否存在原型關係,使用方法如下:
fn.prototype.
isprototypeof
(f)// 檢視 fn 的 prototype 物件,是否是 f 原型
instanceof運算子,用於檢測某例項是否來自於某建構函式,使用方法如下:
console.
log(f instanceoffn)
// 檢視 f 物件是否是建構函式 fn 的例項
console.
log(f instanceof
object
)// 檢視 f 物件是否是建構函式 fn 的例項
兩種使用,如果是返回ture,如果不是返回false
注意:instanceof運算子右側為建構函式,並且js中所有原型都來自object建構函式
當訪問例項 f
的屬性或方法時,會先在當前例項物件 f
中查詢,如果沒有,則沿著__proto__
繼續向上尋找,如果找到最頂頭的object
還是找不到,則會丟擲undefined
。如果在例項中找到
,或某層原型中找到
,就會讀取並使用,
同時停止向上找尋
。
由此可見,解析器的解析順序遵循就近原則,如果在最近的位置發現屬性存在,便不會繼續向上找尋。
一文教你玩轉git
首先進入乙個目錄之後,使用這個命令是先初始化乙個git倉庫 git init 它會預設建立乙個名為master的分支 下面這個用於檢視是否有修改的檔案,如果有就會報紅 git status 下面這個用於檢視檔案修改的細節 git diff test.txt 下面這個是提交到暫存區 git add t...
一文教你 Mysql資料備份
按照備份時對資料庫的影響範圍分為 cold backup 冷備 指在資料庫停止的情況下進行備份 offlinebackup 官方手冊稱為離線備份 warm backup 溫備 備份同樣在資料庫執行時進行,但是會對當前資料庫的操作有所影響,例如 加乙個全域性讀鎖以保證備份資料的一致性。按照備份後的檔案...
一文教你如何解讀Vintage
當我們在觀測資產最終損失和不同資產的風險差異時,經常會用到乙個指標,那就是vintage。這個指標的計算和展示與大多數指標有所不同,因為所需要的資料資訊並不單 於某乙個固定時間的切片資料,而是 於歷史多個時間節點的切片資料,所以它也攜帶了歷史資訊。vintage本身攜帶了這麼多資訊,我們該如何挖掘呢...