js原型对象和原型链的理解
# 原型对象的概念:
- 原型对象的本质其实是一个Object实例,因为对象沿着原型链最终会指向Object的原型对象。
- 每个函数都有一个prototype属性,该属性指向的是原型对象
- 每个实例对象身上都有一个__proto__属性,该属性指向的也是原型对象(隐式原型对象),并且实例的隐式原型对象和构造函数的显示原型对象是全等的。
# 原型链概念:
- 查找对象的属性的时候现在自身找,如果自身没有沿着__proto__找原型对象,如果原型对象上还没有,继续沿着__proto__,直到找到Object的原型对象对象, 如果还没有找到返回undefined。我们将沿着__proto__查找的链称作为原型链。
- 原型链则是指,当查询一个对象的属性时,如果对象本身不存在该属性,则会沿着原型链向上查找,直到找到该属性或到达 Object 的原型对象为止。因此,原型链代表着从一个对象到另一个对象的继承关系。
原型的存在主要是为了解决在实例化时,节省内存,可以减少实例化是对象内部的属性或者方法过多,可以将这些属性或者方法放在原型上,实例对象在需要这些属性或者方法时,可以直接调用,js会根据原型链进行查找。
function ProtoF(name,age){
this.name = name
this.age = age
this.showtest=function(){
console.log('this is show test')
}
}
ProtoF.prototype.showtest2=function(){
console.log('this is common way')
}
let obj1 = new ProtoF("zl",'12')
let obj2 = new ProtoF("jhh",'13')
console.log(obj1,obj2)
console.log(obj1.showtest2(),obj2.showtest2())
console.log(obj1.__proto__===ProtoF.prototype) //注意此处