最近重新梳理了一下原型的知识, 想分享一下,希望对那些被原型,原型链,构造函数,实例对象等关系满头包的童鞋有些帮助~~~
废话不说了 上代码
// 原型 prototype
function Man(name,age){
this.name=name,
this.age=age
}
let Person={
name:'李四',
age:18,
hobby:'reading',
//...
}
Man.prototype=Person // 这里 Person 就是 Man 的原型
// 原型是指构造函数通过 prototype 访问的属性
let boy=new Man() //boy 为 Man 的实例对象
//boy 是 Man 这个构造函数实例化出来的对象
console.log(boy)
这是 boy 的打印结果
再打印一下 boy.__proto__ 我们可以看到 boy 的__proto__是 Man 的原型 Person 对象
console.log(boy.__proto__==Man.prototype)// true
//boy 这个实例化对象的原型和 Man 的原型指向同一个对象 `
继续打印 boy._proto_._proto_和 boy._proto_._proto_._proto_
console.log(boy.__proto__.__proto__)//Object
// 可以看到 boy 的原型的原型是 Object 对象, 再往上找为空
console.log(boy.__proto__.__proto__.__proto__)//null
// 这种通过_proto_逐层向上访问的链式关系称为原型链
下面是原型,原型链,构造函数的关系图
我们可以看到,原型链就是通过_proto_连接的链式继承关系