欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中isPrototypeOf函數(shù)

 更新時間:2021年11月04日 16:38:43   作者:快樂編程  
這篇文章主要介紹了JavaScript中isPrototypeOf函數(shù),isPrototypeOf() 是 Object函數(shù)(類)的下的一個方法,用于判斷當(dāng)前對象是否為另外一個對象的原型,如果是就返回 true,否則就返回 false,下面來看看詳細(xì)內(nèi)容,需要的朋友可以參考一下

 有時看一些框架源碼的時候,會碰到 isPrototypeOf() 這個函數(shù),那么這個函數(shù)有什么作用呢?

1、isPrototypeOf()

isPrototypeOf() Object函數(shù)(類)的下的一個方法,用于判斷當(dāng)前對象是否為另外一個對象的原型,如果是就返回 true,否則就返回 false。

這個函數(shù)理解的關(guān)鍵是在原型鏈上,這個據(jù)說是JavaScript的三座大山之一。

這里不詳述其中的原理,簡單的來講就是3點:

  • 1. 函數(shù)對象,都會天生自帶一個prototype原型屬性。
  • 2. 每一個對象也天生自帶一個屬性__proto__指向生成它的函數(shù)對象的prototype
  • 3. 函數(shù)對象的prototype也有__proto__指向生成它的函數(shù)對象的prototype。

示例1,Object類實例:

let o = new Object();
console.log(Object.prototype.isPrototypeOf(o)); // true


因為o對象是Object的實例,所以o對象的原型(__proto__)指向Object的原型(prototype),上面會輸出true。

示例2,自己定義Human類:

function Human() {}
let human = new Human();
 
console.log(Human.prototype.isPrototypeOf(human)); // true


這例和上例類似,因為human對象是Human的實例,所以human對象的原型(__proto__)指向Human的原型(prototype),上面會輸出true

示例3,再來看看Object的原型(prototype)是否是human的原型:

console.log(Object.prototype.isPrototypeOf(human)); // true


為什么呢?,用代碼可能更好解釋,請看下面推導(dǎo):

// 因為 Human 的原型(prototype)中的原型(__proto__)指向 Object 的原型(prototype)
Human.prototype.__proto__ === Object.prototype
// 又因為 human 的原型(__proto__)指向 Human 的原型(prototype)
huamn.__proto__  === Human.prototype
// 所以human對象的原型(__proto__)的原型(__proto__)指向Object的原型(prototype)
huamn.__proto__.__proto__  === Object.prototype


如果查看human的結(jié)構(gòu)就很容易清楚了:

Object 的原型(prototype) 是不是就是 human 對象的原型呢?確切的說Object 的原型(prototype)是在 human 的原型鏈上。

示例4,Object.prototype是否是內(nèi)置類的原型:

JavaScript中內(nèi)置類NumberString、Boolean、FunctionArray因為都是繼承Object,所以下面的輸出也都是true

console.log(Object.prototype.isPrototypeOf(Number)); // true
console.log(Object.prototype.isPrototypeOf(String)); // true
console.log(Object.prototype.isPrototypeOf(Boolean)); // true
console.log(Object.prototype.isPrototypeOf(Array)); // true
console.log(Object.prototype.isPrototypeOf(Function)); // true


自然Object.prototype也是NumberString、Boolean、Function、Array的實例的原型。

示例5,Object也是函數(shù)(類):

另外值得一提的是 Function.prototype 也是Object的原型,因為Object也是一個函數(shù)(類),它們是互相生成的。

請看下面輸出:

console.log(Object.prototype.isPrototypeOf(Function)); // true
console.log(Function.prototype.isPrototypeOf(Object)); // true

2、和 instanceof 的區(qū)別

instanceof 是用來判斷對象是否屬于某個對象的實例。

例如:

function Human() {}
let human = new Human();
 
// human 是 Human 的實例,所以結(jié)果輸出true
console.log(human instanceof Human); // true
 
// 因為所有的類都繼承Object,所以結(jié)果也輸出true
console.log(human instanceof Object); // true
 
// 因為 human 對象不是數(shù)組,所以結(jié)果輸出false
console.log(human instanceof Array); // false


再來一些內(nèi)置類的例子:

// 【1,2,3] 是 Array 的實例,所以輸出true
console.log([1, 2, 3] instanceof Array); // true
 
// 方法 function(){} 是 Function的實例,所以輸出true
console.log(function(){} instanceof Function);


instanceof 作用的原理就是判斷實例的原型鏈中能否找到類的原型對象(prototype),而 isPrototypeOf 又是判斷類的原型對象(prototype)是否在實例的原型鏈上。

所以我的理解,這兩個表達(dá)的意思是一致的,就是寫法不同,下面兩個輸出應(yīng)該是一致的:

console.log(A instanceof B);
console.log(B.prototype.isPrototypeOf(A));


小結(jié)

其實要理解 isPrototypeOf 函數(shù),關(guān)鍵是要理解原型鏈這個玩意。

到此這篇關(guān)于JavaScriptisPrototypeOf函數(shù)的文章就介紹到這了,更多相關(guān)JavaScript中isPrototypeOf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 原型和原型鏈 prototype和proto的區(qū)別詳情

    原型和原型鏈 prototype和proto的區(qū)別詳情

    原型是function對象下的屬性,它定義了構(gòu)造函數(shù)的共同祖先,也就是一個父子級的關(guān)系,子對象會繼承父對象的方法和屬性,每個實例對象下都有__proto__屬性,通過屬性__proto__指向構(gòu)造函數(shù)的原型對象,當(dāng)?shù)竭_(dá)末端時,返回null,這樣一層一層向頂端查找,就形成了原型鏈
    2021-10-10
  • JavaScript 對象創(chuàng)建的3種方法

    JavaScript 對象創(chuàng)建的3種方法

    這篇文章主要給大家分享的時JavaScript 對象創(chuàng)建的3種方法,在 JavaScript中,對象是一組有屬性名和屬性值組成的無序集合,對象的創(chuàng)建可以通過對象字面量、new 關(guān)鍵字 和Object.create()函數(shù)來創(chuàng)建。
    2021-11-11
  • Intl對象DateTimeFormat?ListFormat?RelativeTimeFormat使用講解

    Intl對象DateTimeFormat?ListFormat?RelativeTimeFormat使用講解

    這篇文章主要為大家介紹了Intl對象DateTimeFormat?ListFormat?RelativeTimeFormat使用講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • canvas?中如何實現(xiàn)物體的框選

    canvas?中如何實現(xiàn)物體的框選

    這篇文章主要為大家介紹了canvas中如何實現(xiàn)物體的框選的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 微信小程序 緩存(本地緩存、異步緩存、同步緩存)詳解

    微信小程序 緩存(本地緩存、異步緩存、同步緩存)詳解

    這篇文章主要介紹了微信小程序 緩存(本地緩存、異步緩存、同步緩存)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 徒手實現(xiàn)關(guān)于JavaScript的24+數(shù)組方法

    徒手實現(xiàn)關(guān)于JavaScript的24+數(shù)組方法

    數(shù)組是我們?nèi)粘9ぷ髦杏玫淖铑l繁的一類數(shù)據(jù)結(jié)構(gòu),能幫助我們解決許多問題,而其本身也包含接近33個之多的方法,做了一個腦圖分類如下,熟練使用數(shù)組的你,是否想知道他們內(nèi)部的實現(xiàn)原理呢?接下來小編就帶大家進(jìn)入主題,希望能幫助到你
    2021-09-09
  • JS前端二維數(shù)組生成樹形結(jié)構(gòu)示例詳解

    JS前端二維數(shù)組生成樹形結(jié)構(gòu)示例詳解

    這篇文章主要為大家介紹了JS前端二維數(shù)組生成樹形結(jié)構(gòu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 微信小程序 canvas API詳解及實例代碼

    微信小程序 canvas API詳解及實例代碼

    這篇文章主要介紹了微信小程序 canvas API詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 總結(jié)JavaScript中BigIn函數(shù)常見的屬性

    總結(jié)JavaScript中BigIn函數(shù)常見的屬性

    本文基于JavaScript基礎(chǔ),介紹了 BigInt 函數(shù),常見的屬性,通過 BigInt 函數(shù)進(jìn)行數(shù)字運算符的比較。布爾運算等等,通過按案例的分析進(jìn)行詳細(xì)的講解,需要的朋友可以參考一下
    2021-10-10
  • 基于JavaScript ES新特性let與const關(guān)鍵字

    基于JavaScript ES新特性let與const關(guān)鍵字

    這篇文章主要介紹了基于JavaScript ES新特性let與const關(guān)鍵字,let是ECMAScript 2015新增的一個關(guān)鍵字,用于聲明變量,const關(guān)鍵字用于聲明一個常量,更多詳細(xì)內(nèi)容,請需要的小伙伴參考下面文章的介紹,希望對你有所幫助
    2021-12-12

最新評論