所有的构造函数都有一个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
实例对象和原型之间的连接 就叫做原型链