1.Javascript中所有的对象都是Object的实例,并继承Object.prototype的属性和方法,也就是说,Object.prototype是所有对象的爸爸。(重点!!!)
2.定义函数的时候,预定义属性就是prototype,这个prototype是一个普通的对象。
而定义普通的对象的时候,就会生成一个__proto__,这个__proto__指向的是这个对象的构造函数的prototype.
3.反正根据上文两个要点,可以整理得:
例如我们定义一个函数
functon fun(a){
console.log(a)
}
那么这个函数本身就因为函数的定义而有一个prototype,然后这个函数的_proto_就是Object.prototype
然后使用这个函数去定义一个实例的时候:
fun(""laozhichi love liulijuan)
那么这个已经实例化的函数的_proto_就指向了其定义时函数的prototype
4.所以根据前面几点的介绍,当我们手写实现prototype关键字的时候,可以使用以下代码:
function instanceOf(father, child) {
const fp = father.prototype
var cp = child.__proto__ //在这里的_proto_表示指向上一级的
while (cp) {
if (cp === fp) {
return true
}
cp = cp.__proto__
}
return false
}