1.原型模型要求一个类型在一个时刻只能有一个原型(而一个实例在一个时刻可以有多个类型)。对于JavaScript来说,这个限制有两层含义,第一是每个具体的JavaScript类型有且仅有一个原型(prototype),在默认的情况下,该原型是一个Object对象(注意不是Object类型)。第二是,这个类型的实例的所有类型,必须是满足原型关系的类型链。

原型模型要求一个类型在一个时刻只能有一个原型的疑问.hmtl 

 
  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 
  4. <title>原型模型要求一个类型在一个时刻只能有一个原型的疑问</title> 
  5. </head> 
  6. <body> 
  7. <script> 
  8. <!-- 
  9.   function dwn(s) 
  10.   { 
  11.     document.write(s + "<br/>"); 
  12.   } 
  13.  
  14.   //定义Point2D对象 
  15.   function Point2D(x,y) 
  16.   { 
  17.     this.x = x; 
  18.     this.y = y; 
  19.   } 
  20.   Point2D.prototype.x = 0
  21.   Point2D.prototype.y = 0;   
  22.  
  23.  
  24.   //定义ColorPoint2D对象 
  25.   function ColorPoint2D(x,y,c) 
  26.   { 
  27.     this.x = x; 
  28.     this.y = y; 
  29.   } 
  30.    
  31.   //ColorPoint2D以Point2D对象为原型 
  32.   ColorPoint2D.prototype = new Point2D(90,90); 
  33.   ColorPoint2D.prototype.x = 1
  34.   ColorPoint2D.prototype.y = 1
  35.    
  36.   //构造一个ColorPoint2D对象 
  37.   var cp = new ColorPoint2D(10,20,"red"); 
  38.   dwn(cp.x);  //10先查找cp本身的属性 
  39.   delete cp.x; 
  40.   dwn(cp.x);  //1 删除后查找上层原型链上的属性 
  41.   delete ColorPoint2D.prototype.x; 
  42.   dwn(cp.x);  //0删除后继续查找更上层原型链上的属性 
  43.  
  44.   /* 
  45.   * ColorPoint2D.prototype = new Point2D(90,90); 
  46.   * ColorPoint2D.prototype.x = 1
  47.   * ColorPoint2D.prototype.y = 1
  48.   *原型模型要求一个类型在一个时刻只能有一个原型,ColorPoint2D的原型是new Point2D(90,90)对象,还是Object 
  49.   */ 
  50. --> 
  51. </script> 
  52. </body> 

 假如考虑到对象是可以动态添加属性的,那么可以不可以认为ColorPoint2D的原型是new Point2D(90,90)对象,这个对象添加了x y两个属性