//通过函数构造对象
function person(name){
this.name = name
this.test = function(){
console.log('test')
}
}
console.log(person.prototype.constructor == person)//true,函数的prototype.construtor指向该函数
var p = new person('aa')
person.prototype.public = 123//给函数的prototype添加属性则可供所有对象公用
//p.prototype.aa = 3//错误写法,只有函数有prototype属性,对象只有__proto__
console.log(p.name)//aa
console.log(p.public)//123
p.test()//test
//p.age = 123//错误写法,通过函数构造器创建的对象不能动态添加属性
console.log(person.prototype == p.__proto__)//true,对象的原型(__proto__)指向构造该对象的函数(person)的prototype属性
var b = {
bb:1
}
Object.setPrototypeOf(p,b)//设置b为p的原型对象,或者p.__proto__ = b
console.log(p.bb)//1,先到p的属性中找bb,找不到就到p的原型对象b中寻找,如此递归,直到找到或原型对象为空,这就是原型链