这几天在学JS高级,现在就简单总结一下我学的知识点吧。
原型与原型链
一、函数的prototype属性
1.我们创建的每个函数都有一个 prototype (原型)属性(这个属性是一个指针,指向一个对象,
而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法),它默认指向一个object空对象(即称为原型对象)。
2.原型对象中有一个属性constructor(构造函数),它指向函数对象。
二、给原型对象添加属性(一般都是方法)
作用:函数中的所有实例对象都自动拥有原型中的属性(方法)。
三、显式原型与隐式原型
1.每个函数function都有一个prototype,即显式原型(属性)。
2.每个实例对象都有一个__proto__,即隐式原型(属性)。
3.对象的隐式原型值为其对应构造函数的显式原型值。
4. 内存结构图解:
四、原型链
原型链是什么呢,根据字面意思我们可以这样理解,就是将原型连成一条链。在访问一个对象属性时先在自身属性中查找,找到返回;如果没有,再沿着__proto__这条链向上查找,找到返回;如果到最后都没有找到,就会返回undefined。
作用:查找对象的属性(方法)。
五、确定原型和实例的关系
第一种方式是使用 instanceof 操作符
第二种方式是使用 isPrototypeOf() 方法
A.isPrototypeOf(B) 判断的是A对象是否存在于B对象的原型链之中
A instanceof B 判断的是B.prototype是否存在与A的原型链之中