原型prototype和proto每次都觉得自己掌握地不透 知识点太多太杂 现在开启我的梳理之路 希望能给大家一点帮助
原型是函数通过.protytype可以访问到的属性,是属于函数的属性。函数都有自己的原型,函数的原型可以通过prototype改变默认的原型
例如:
let myobj={
name:'testobj'
}
Car.prototype=myobj
console.log(Car.prototype)
我们可以通过设置Car.prototype=myobj改变Car默认的原型
下面简单聊聊原型上的属性重写的问题
对象new之前重写 new之前重写原型原型上的属性变了所以new出来的对象也会改变
new之前改写原型属性
function Car(){
name='benz'
}
Car.prototype={//new之前重写原型
name:'posche'
}
let mycar=new Car()
console.log(mycar.name)//posche
new之后改写原型属性
function Car(){
name='benz'
}
let mycar=new Car()
Car.prototype={//new 之后重写原型
name:'farari'
}
console.log(mycar.name) //benz
直接给prototype上的属性赋值
function Car(){
name='benz'
}
Car.prototype.name="posche"
let mycar=new Car()
console.log(mycar.name)//posche
Car.prototype.name="farari"
console.log(mycar.name)//farari
二、原型链
function Grandfather(){//祖父构造函数
this.salary='1000万'
}
let grandfather=new Grandfather()//祖父对象实例
function Father(){
this.salary='100万'
}
Father.prototype=grandfather//把祖父对象设置成父构造函数的原型 下面的同理
let father=new Father()
function Son(){
this.salary='10万'
}
Son.prototype=father
let son=new Son()
function Grandson(){
this.salary='1万'
}
Grandson.prototype=son
let grandson=new Grandson()
console.log(grandfather)
上面是一系列构造函数,祖父构造函数,通过祖父构造函数 Grandfather new一个祖父对象grandfather,再构造一个父函数father,把祖父函数new的对象grandfather设置成父函数father的原型 以此类推 大家可以看下边的打印结果 这些对象都通过一个叫_proto_的属性依次向上继承父辈的属性形成了链式继承 这种链条称之为原型链
换句话说原型链就是用_proto_串起来的链式继承关系
如下所示 Grandfather的_proto_是一个对象Object
Object点开以后是对象Object的一些属性和方法 我们可以总结一个结论 原型的顶端是对象的原型 Object._proto_
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。