JavaScript isPrototypeOf()

admin發表於2018-10-31

isPrototypeOf方法可以檢測一個物件是否在另一個物件的原型鏈上。

如果在,則返回true,否則返回false。

結合此方法名稱有助於理解,isPrototypeOf由如下幾個單詞合成:
(1).is:在疑問句大致為"是否"的意思。

(2).prototype:原型。

(3).of:表示歸屬。

更多Object物件內容參閱JavaScript Object 物件一章節。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
prototypeObj.isPrototypeOf(object)

引數解析:

(1).prototypeObj:一個物件。

(2).object:必需,判斷prototypeObj物件是否在object物件原型鏈上。

瀏覽器相容:

(1).IE瀏覽器支援此方法。

(2).edge瀏覽器支援此方法。

(3).谷歌瀏覽器支援此方法。

(4).火狐瀏覽器支援此方法。

(5).Opera瀏覽器支援此方法。

(6).Safari瀏覽器支援此方法。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let webName = {webName:"螞蟻部落"};
let web = Object.create(webName);
console.log(webName.isPrototypeOf(web));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/31/013615l4bbg1egwuvnbxxw.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼分析如下:

(1).通過Object.create方法建立物件web,此物件的原型是webName。

(2).很自然此方法的返回值是true。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function A(){}
function B(){}
function C(){}
B.prototype=new A();
C.prototype=B.prototype;
console.log(B.prototype.isPrototypeOf(new C()));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/31/013648hetp5zieppnkrivv.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

建構函式C的原型與建構函式B的prototype原型指向同一個物件。

於是B.prototype自然就是C物件例項的原型物件。

再來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function A(){}
function B(){}
function C(){}
B.prototype=new A();
C.prototype=B.prototype;
console.log((new C()).__proto__==B.prototype);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/31/013723kmpubw2umi4bpite.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

假設建構函式F,然後建立它的物件例項f,那麼物件例項f的__proto__屬性指向F.prototype。

通過__proto__屬性可以將原型串成一條鏈,也就是原型鏈。

特別說明:雖然當前主流瀏覽器都支援__proto__屬性,但是推薦使用isPrototypeOf方法判斷。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function Foo(){}
let f=new Foo();
console.log(Foo.prototype.isPrototypeOf(f));
console.log(Object.prototype.isPrototypeOf(f));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201811/28/224823ag4i0dv0igs026vy.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

第二個列印結果也是true,雖然Object.prototype不是f的直接原型物件,但是在其原型鏈上。

相關閱讀:

(1).prototype參閱JavaScript prototype 原型一章節。

(2).原型鏈參閱JavaScript 原型鏈一章節。

(3).__proto__參閱__proto__屬性一章節。

相關文章