原型, 原型链, 继承

关于原型 原型链和原型继承的理解

原型

prototype首先是只作用于函数的属性,无法直接用于对象或变量

每个函数中都自带一个_proto_属性

在实例化对象(构造函数)时,寻找某个属性(如demo的name属性),在当前属性中无法找到属性,会从xxx._proto_中进行寻找,若还没有找到,会继续向xxx._proto_._proto_中进行寻找

之前看到有一个简单的比喻

现在有一个函数function 爹(){};爹里面有一个方法叫prototype,即原型,爹.prototype.money=10000;在爹的prototype里面加一个money属性,值为10000;

现在儿子 = new 爹(); 儿子现在是个对象,那它就有个_proto_属性,它是从爹new出来的实例,那它的_proto_指向爹的prototype

那么儿子就可以从爹那里继承money=10000;即console.log(儿子.money) // 10000

我们说万物皆对象,那爹的prototype里面也应该有个_proto_属性,它指向爷爷的prototype(原型);爷爷的prototype也有个_proto_属性,指向太爷爷的prototype   万物皆对象,最后会指向Object的prototype;但是祖宗总得有个头,最后一个祖宗,即Object,它的_proto_指向null  这就形成了原型链   null没有prototype(原型)

 

 

 

原型链继承

儿子从爹那里继承过来的属性其实相当于复制了一份,在爹的prototype里的共有属性任何儿子都能继承,如果觉得继承的方法不好可以自己重写,不影响其他的继承

如果修改了爹的prototype,所有子类的_proto_都会改变

 

posted @ 2020-06-12 14:43  Lsnower  阅读(179)  评论(0)    收藏  举报