本文实例讲述了javascript 原型与原型链的理解。分享给大家供大家参考,具体如下:
创新互联建站长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为山南企业提供专业的网站设计制作、成都网站设计,山南网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。javascript中一切皆对象,但是由于没有Class类的概念,所以就无法很好的表达对象与对象之间的关系了。
比如对象A与对象B之间,它们两个是相对独立的个体,互不干扰,对象A修改自身的属性不会影响到对象B。
虽然这很好,但是有一个问题,如果对象A与对象B都有一个方法 run() ,并且代码也一样,那对象A与对象B各自都独立拥有一份 run() 方法的完整代码,这是需要资源去保存的。
一旦我们程序中应用的对象过多,那这种资源消耗会是巨大的。那有没有一种方法可以让对象A与对象B拥有一些公共的属性和方法,让它们之前有某种联系?
我们设想一下,会不会存在一个 common对象(公共对象),common对象上保存着公共的属性和方法,而对象A与对象B里面有一个prototype属性指向这个 common对象,
当然我们调用对象A或对象B的属性和方法时,如果在自身对象中没有找到,就去prototype这个属性指向的对象上面去找。
而common对象本身也有一个prototype属性指向更上一级的common对象,然后一直往上找啊找,直到为null,就停止。
这种不断的从下往上找的这种路径,就像链条一样,我们称它为 原型链,而那个common对象,我们称它为 原型对象。
我们来看一个构造函数
function Base(name) { this.name = name; } let A = new Base('A'); let B = new Base('B'); //每一个函数都有一个prototype属性,指向该函数的原型对象 console.log(Base.prototype); //当然原型对象也是一个对象,它也有一个constructor,指向构造函数 console.log(Base.prototype.constructor === Base); //每一个实例对象的constructor都指向创建它们的构造函数 console.log(A.constructor === Base); console.log(B.constructor === Base); //每一个实例对象都有一个__proto__属性,该属性指向构造函数的原型对象 console.log(A.__proto__ === Base.prototype); console.log(B.__proto__ === Base.prototype);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。