目录
1.基本原理
原型:它就是一个普通的对象,它是为了构造函数的实例共享属性和方法。所有实例中引用的原型都是同一个对象。
原型链:一个实例对象在调用属性和方法的时候,会依次从实例本身、构造函数原型、原型的原型上去查找是否有我们需要的属性和方法,这样寻找的过程和链条类似,我们称之为原型链。
2.使用意义
使用prototype可以把方法挂载到原型上,内存中只保存一份。
3.代码示例
function Person(){
this.say = function(){
console.log('abc')
}
}
var obj1 = new Person()
var obj2 = new Person()
obj1.say()
obj2.say()
上述代码存在的问题:方法调用占用了两份内存。如果我们需要使用多个实例,那么在内存中就会创建多个方法占用多份内存,造成内存资源的浪费。
解决此问题的方法:使用prototype方法,可以将方法挂载到原型上,这样内存中只需要储存一份内容,其他所有的实例都可以共享这个方法。
Person.prototype.look = function(){
console.log('我被调用了')
}
obj1.look()
obj2.look()
那么这些实例是怎样访问到Person原型上look这个方法呢?
__proto__:可以理解为指针,它是实例对象中的属性,指向构造函数的原型(prototype)。
console.log(obj1.__proto__ === Person.prototype)
输出结果为true,验证了上述结论。