同一类型的多个对象需要共享的属性和方法,需要创建一个专门的对象来储存,这个对象就是Prototype的一个实例prototype,也就是所谓的原型。这个实例prototype的指针_proto_隐式存储在我们要创建的某类对象的构造函数内部。那么我们通过这个构造函数创建的所有实例,都拥有一个指向原型对象的指针。这个原型就相当于java语言中的某个类的静态成员的存储空间,这个空间中存放了类的全部静态成员。
而在该构造函数内部原型指针指向的原型中,也多了两个属性,其中一个constructor属性,也相当于一个指针,只不过这个指针是指向与指向所属原型的构造函数构成的实例的。这样的结果是,创建各个实例的构造函数与指向的共享内容的原型对象相互关联。
原型模式的执行流程是:
如果原型中属性有与实例属性相同的,那么一个对象访问这个同名的属性的时候,先是查找实例对象空间中是否有这个属性,如果有就调用。如果没有就去原型空间中去查找。
但是如果的确出现了同名属性。那么如何访问原型中的属性呢?那么可以先删除实例中的这个同名属性,然后就可以访问到这个同名的原型中的属性。
可以改变原型属性的值,直接XX.prototype.xx=新的值,即可。这个原理是覆盖了。