手寫instanceof 的實現:
instanceof 運算符用於測試構造函數的 prototype 屬性是否出現在對象原型鏈中的任何位置。
實現思路:
首先 instanceof 左側必須是對象, 才能找到它的原型鏈
instanceof 右側必須是函數, 函數才會prototype屬性
迭代 , 左側對象的原型不等於右側的 prototype時, 沿着原型鏈重新賦值左側
// [1,2,3] instanceof Array ---- true // L instanceof R // 變量R的原型 存在於 變量L的原型鏈上 function instance_of(L,R){ // 驗證如果為基本數據類型,就直接返回false const baseType = ['string', 'number','boolean','undefined','symbol'] if(baseType.includes(typeof(L))) { return false } let RP = R.prototype; //取 R 的顯示原型 L = L.__proto__; //取 L 的隱式原型 while(true){ // 無線循環的寫法(也可以使 for(;;) ) if(L === null){ //找到最頂層 return false; } if(L === RP){ //嚴格相等 return true; } L = L.__proto__; //沒找到繼續向上一層原型鏈查找 } }