现在的位置: 主页 > 商讯 > 文章列表

JavaScript之prototype断链理解

作者:厦工楚胜(湖北)专用汽车制造有限公司 来源:www.szzq168.com 发布时间:2017-09-05 12:33:23
 

JavaScript之prototype断链理解

最近在论坛看到一篇帖子关于prototype断链的,原文如下

var sound = {echo: function() { alert("sound"); } }; function Person() {this.name="name_";}; Person.prototype = sound;//----早点绑上去---- var fo1o = new Person(); var xxxxxx=Person.prototype;//----迟了绑上去----?? xxxxxx.yyyy="yyyy_"; alert(fo1o.echo);//alert(undefined); alert(fo1o.yyyy);//alert(undefined); //////////////////////////////////////////////////////////////////////////////////////////////////// var sound = {echo: function() { alert("sound"); } }; function Person() {this.name="name_";}; var fo1o = new Person(); Person.prototype = sound;//----迟了绑上去---- var xxxxxx=Person.prototype;//----迟了绑上去----?? xxxxxx.yyyy="yyyy_"; alert(fo1o.echo);//alert(function(){....}); alert(fo1o.yyyy);//alert("yyyy_"); //为什么alert(fo1o.yyyy)会受到影响。
这里的alert注释写反了,不过这不是重点,重点是为什么第二次alert的东西是undefined?而且后来我做了实验,测试如下内容:

1.alert(fo1o.name);//name_

2.Person.prototype.name='_name';alert(fo1o.name);//name_

3.Person.prototype.name='_name';var fo2o=new Person();alert(fo2o.name);//name_

以上三个实验主要是测试prototype能否修改对象原有属性,结果是不能的,因为其实每个对象保存的东西除了固有(即声明时带着)的属性和方法外,还有一个prototype对象,而prototype主要是用来扩充原有对象的功能,就是说,如果访问一个对象的属性时,先在固有属性里找,如果找不到,就再去prototype对象中的属性中找。具体请看下面两个图:

\

\


第一个图声明了一个类Person,该类有一个固有属性name和一个prototype属性age,然后声明一个Person的对象a,然后它的name属性从Person类中cZ喎

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网页设计 http://www.feimao666.com

  • 上一篇:flex datagrid 动态设置行背景色
  • 下一篇:最后一页