對isPrototypeOf和getPrototypeOf兩個方法,通過例子進行了簡要的講解。
在JavaScript這個一切皆為對象的世界里,難免會判斷原型鏈的問題。那麼我們就有必要瞭解瞭解isPrototypeOf和getPrototypeOf這兩個方法咯。
1、 isPrototypeOf
isPrototypeOf |
|
作用 |
我的理解:確定一個對象的原型鏈中是否繼承了prototype |
官方語言:Determines whether an object exists in another object's prototype chain. |
|
用法 |
prototype.isPrototypeOf(object) |
備註 |
如果object的原型鏈中有prototype,則返回true;否則,返回false |
我們一起demo下,看看isPrototypeOf到底是個什麼東東。
<!DOCTYPE html> <head> <title>isPrototypeOf</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> function A(){ } var a = new A(); //通過A創建一個對象a,所以a的__proto__是指向A.prototype的 console.log(A.prototype.isPrototypeOf(a)); //A.__proto__是指向Object.prototype的 console.log(Object.prototype.isPrototypeOf(A)); //由於A.prototype的__proto__是指向Object.prototype的,所以a也就含有Object.prototype咯 console.log(Object.prototype.isPrototypeOf(a)); </script> </body> </html>
運行上面的代碼,截圖chrome,如下
從上面的代碼和chrome結果,可知isPrototypeOf的確是判斷對象中的原型鏈是否繼承了prototype。
2、 getPrototypeOf
getPrototypeOf |
|
作用 |
返回對象__proto__指向的原型prototype |
用法 |
Object的靜態方法,使用如下Object.getPrototypeOf(object) |
還是如此,我們一起demo下
<!DOCTYPE html> <head> <title>getPrototypeOf</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> function Fn(){ } var fn = new Fn(); //通過getPrototypeOf靜態方法,獲得對象fn的prototype var proto = Object.getPrototypeOf(fn); //將獲得的prototype添加一個name屬性,並賦值 proto.name = 'Monkey'; //輸出對象fn.name console.log(fn.name); //判斷proto是否是Fn.prototype console.log( 'proto === Fn.prototype? ' + (proto === Fn.prototype) ); //判斷fn的__proto__是否指向了prototype console.log( proto.isPrototypeOf(fn)); </script> </body> </html>
執行上面的代碼,截圖chrome,如下
從上面的代碼和結果圖,可得:
getPrototypeOf,的確是返回對象__proto__指向的prototype。