欢迎来到天天文库
浏览记录
ID:39551532
大小:575.00 KB
页数:4页
时间:2019-07-06
《javascript 中 prototype的理解 以及原型链实现继承的原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、javascript中prototype的理解以及原型链实现继承的原理我们经常用prototype的方式实现js对象的继承,以前一直没有去细看过prototype,constructor和对象以及new出来的实例对象的关系现在来梳理一下对象,prototype,constructor,实例对象之间的关系 Parent对象 ?1234567891011121314//Parentfunction Parent(){ this.name="wangzheng"; this.password="123456";}//Parent.prototype = object;
2、//这一步其实可以不用写Parent.prototype.showMe=function(){ document.write(this.name +"-"+this.password);};var parent = new Parent(); alert(Parent.prototype);//[object Object]alert(Parent.prototype.constructor);//function Parent(){...}alert(parent.prototype);//undefined通过这段代码我们可以得出: 1.这个Parent对象本身具
3、有一个prototype属性,它指向一个独立的prototype对象, 2.这个prototype对象又包含一个constractor属性,它反过来指向了Parent对象的定义function.这一点在代码的alert输出中可以看到3.new出来的parent实例对象她是不具备prototype属性的所以alert输出她的prototype是undefined.但是还有一个疑问 ,parent实例对象里没有prototype属性,却可以使用prototype上的showMe方法,这怎么说呢?直接看firebug的信息:parent实例对象里面有一个属性__proto__她
4、指向了Parent对象的prototype,这样一看就真相大白parent实例对象之所以可以调用showMe方法,就是因为这个属性__proto__ 通过__proto__实现的调用当然这个图中你还可以看到 prototype里包含constructor,constructor指向Parent,Parent包含prototype,prototype包含constructor........互相引用的画个图就是这样的:继承中的原型链下面研究一下继承的情况 加入一个子类?1234567891011//Sonfunction Son(){ this.name="jiangw
5、en"; this.password="abcd1234"; this.sonName="wahaha";}Son.prototype = parent;Son.prototype.showMeSon=function(){ document.write(this.name +"-"+this.password+"-"+this.sonName);};var son = new Son();可以看到Son的prototype指向一个Parent实例对象 这没有问题再来看看son实例对象属性和方法都没有问题 但是son对象里面的__proto__属性指向的是
6、parent实例对象,但是我觉得应该是指向Son里面的prototype,由于Son里面的prototype指向的是parent实例对象所以fireBug里看起来才像是指向了指向的是parent实例对象 那么看图吧:这样一来对于js用prototype实现继承的原理是不是就更加清晰了!
此文档下载收益归作者所有