Js原型链
原型链
- JS的继承机制不同于传统的面向对象语言,采用原型链实现继承,要理解原型链首先要理解原型
原型
- 原型可以认为它是一个模板或者对象模板,利用原型创建出来的新实例会共享原型的所有方法和属性
- 所有引用类型都有一个__proto__属性(隐式原型[[prototype]]),指向它构造函数的prototype
- 所有函数都有一个prototype属性(显式原型),指向当前构造函数的引用地址
- 当用构造函数实例化(new)一个对象时会将新对象的__proto__指向构造函数的prototype
- 所有的原型对象(prototype对象)会自动获取一个constructor属性,指向原型对象所在的函数
原型链
- 原型链是原型创建过程中的历史记录,当访问一个对象的属性时首先会在对象本身的属性中查找,如果没有找到会沿着隐式原型链向上查找,直到找到这个属性或者隐式原型链为null
instanceof
- instanceof用于判断一个原型对象是不是处于一个对象的原型上(github链接)
function myInstanceof(source: any, target: any): boolean {
const baseType = ['number', 'boolean', 'string', 'undefined', 'symbol'];
if (baseType.includes(typeof source)) return false;
let S = source.__proto__;
const T = target.prototype;
while (S) {
if (S === T) return true;
S = S.__proto__;
}
return false;
}
export default myInstanceof;
