您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“JavaScript中isPrototypeOf函數(shù)有什么作用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JavaScript中isPrototypeOf函數(shù)有什么作用”吧!
isPrototypeOf()
是 Object
函數(shù)(類)的下的一個方法,用于判斷當前對象是否為另外一個對象的原型,如果是就返回 true
,否則就返回 false
。
這個函數(shù)理解的關鍵是在原型鏈上,這個據(jù)說是JavaScript
的三座大山之一。
這里不詳述其中的原理,簡單的來講就是3點:
1. 函數(shù)對象,都會天生自帶一個prototype
原型屬性。
2. 每一個對象也天生自帶一個屬性__proto__
指向生成它的函數(shù)對象的prototype
。
3. 函數(shù)對象的prototype
也有__proto__
指向生成它的函數(shù)對象的prototype
。
let o = new Object(); console.log(Object.prototype.isPrototypeOf(o)); // true
因為o
對象是Object
的實例,所以o對象的原型(__proto__)
指向Object
的原型(prototype
),上面會輸出true。
function Human() {} let human = new Human(); console.log(Human.prototype.isPrototypeOf(human)); // true
這例和上例類似,因為human
對象是Human
的實例,所以human
對象的原型(__proto__)
指向Human
的原型(prototype
),上面會輸出true
。
console.log(Object.prototype.isPrototypeOf(human)); // true
為什么呢?,用代碼可能更好解釋,請看下面推導:
// 因為 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的結構就很容易清楚了:
那 Object
的原型(prototype
) 是不是就是 human
對象的原型呢?確切的說Object
的原型(prototype
)是在 human
的原型鏈上。
JavaScript
中內(nèi)置類Number
、String
、Boolean
、Function
、Array
因為都是繼承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
也是Number
、String
、Boolean
、Function
、Array
的實例的原型。
另外值得一提的是 Function.prototype
也是Object
的原型,因為Object
也是一個函數(shù)(類),它們是互相生成的。
請看下面輸出:
console.log(Object.prototype.isPrototypeOf(Function)); // true
console.log(Function.prototype.isPrototypeOf(Object)); // true
instanceof
是用來判斷對象是否屬于某個對象的實例。
例如:
function Human() {} let human = new Human(); // human 是 Human 的實例,所以結果輸出true console.log(human instanceof Human); // true // 因為所有的類都繼承Object,所以結果也輸出true console.log(human instanceof Object); // true // 因為 human 對象不是數(shù)組,所以結果輸出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
)是否在實例的原型鏈上。
所以我的理解,這兩個表達的意思是一致的,就是寫法不同,下面兩個輸出應該是一致的:
console.log(A instanceof B); console.log(B.prototype.isPrototypeOf(A));
到此,相信大家對“JavaScript中isPrototypeOf函數(shù)有什么作用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。