我们每写一个函数,这个函数都有一个原型
原型默认有一个属性叫constructor,constructor属性默认指向这个函数
例如: 写一个构造函数
function Person() {}
console.log(Person.prototype)
// 打印出来是 一个对象
// Object{
// constructor:function(){},
// __proto__:Object
// }
// 给原型对象添加属性
Person.prototype.name = '陈彬',
Person.prototype.age = 23,
console.log(Person.prototype)
// Object {
// name:'陈sir'
// constructor: function() {},
// age:23
// __proto__: Object
// }
// 取值
console.log(Person.prototype.name) //陈sir
// 创建一个对象
var p1 = new Person()
console.log(p1) //Person {}
// p1是一个空对象为什么可以取到prototype里的属性和值呢
console.log(p1.name) //陈彬
console.log(p1.age) //23
这就涉及到原型链
原型链
总结一下 每一个构造函数都有一个原型,原型里有一个construtor属性,这个属性指向构造函数
当我们new一个对象p1的时候 ,并且访问p1对象上的属性时,如果p1这个对象本身没有这个属性,就会通过
__proto__去访问原型上的属性,如过原型上也没有这个属性时,就会通过__proto__去访问Object,如果Object也没有这个属性
那就真的没有了 就是undefined
上图
一般在 Object.prototype原型上找 如果没有,就是undefined了