原型对象与原型链

所有的构造函数都有一个prototype对象,原型对象都包含一个指向构造函数的指针

function Info () {
  
}
var obj = new Info()      // 所有的构造函数new出来的对象都包含一个指向原型对象的内部指针
console.log(Info.prototype)  
console.log(obj. __proto__)         //原型对象       对象.__proto__   输出结果一致
// 在原型对象上创建的方法是共享的

原型链

function Info () {
}
Info.prototype.name = '张三'           //原型属性
var a1 = new Info()
console.log(a1.name)                 //张三
console.log(a1 == Info.prototype)     //false

a1和Info.prototype并不是同一个对象,为什么a1能够访问另一个对象的属性

每个实例对象(new出来的)和原型(prototype)之间会有一个连接,__proto__(原型链)
console.log(a1)输出结果是Info这个对象,对象里会有__proto__原型链会有name这个属性
所以顺着原型链去查找会找到原型,如果原型有name这个属性可以访问到name
function Info (name) {
  this.name = name                      //实例属性
}
Info.prototype.name = '张三'           //原型属性
var a1 = new Info('李四')
console.log(a1.name)                 //李四
这里输出李四是构造函数的实例属性上可以找到这个属性,所以会先去实例上查找,如果实例没有才会去原型上找
找到了返回,原型上没有才会去Object.prototype找。都找不到返回undefined

实例对象和原型之间的连接 就叫做原型链

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容