2、手寫 instanceof 方法
instancecof用于檢測一個對象是否是某個構造函數的實例。它通常用于檢查對象的類型,尤其是在處理繼承關系時。
eg:
const arr = [1,2,3,4,5]console.log(arr instanceof Array); // trueconsole.log(arr instanceof Object); // true
那這是怎么實現的呢?
- 每個對象都有一個原型,對象從其原型繼承屬性和方法。
- 數組的直接原型是
Array.prototype
。 Array.prototype
的原型是Object.prototype
。Object.prototype
的原型是null
,表示原型鏈的終點。
這種原型鏈機制是 JavaScript 繼承和原型繼承的基礎。通過原型鏈,JavaScript 實現了對象的屬性和方法的繼承。
我們就知道:
console.log(arr.__proto__ === Array.prototype); // trueconsole.log(arr.__proto__=== Object.prototype); // trueconsole.log(arr.__proto__.__proto__ === Object.prototype); // trueconsole.log(arr.__proto__.__proto__.__proto__ === null); // true
這就讓我想到本道題木的解題思路:
在函數當中我們輸入目標和待測類型,進行循環,如果原型鏈上有待測類型的原型返回true,沒有也就是當了原型鏈的終點null,返回false
我的代碼:
function getIncetanceof(target , type){// 1、target的原型鏈let targetProto = target.__proto__;// 2、循環判斷while(true){if(targetProto === null){return false;}else if(targetProto === type.prototype){return true;}else{// 都沒有的時候就要更新targetPrototargetProto = targetProto.__proto__;}}}