1.原型模型要求一个类型在一个时刻只能有一个原型(而一个实例在一个时刻可以有多个类型)。对于JavaScript来说,这个限制有两层含义,第一是每个具体的JavaScript类型有且仅有一个原型(prototype),在默认的情况下,该原型是一个Object对象(注意不是Object类型)。第二是,这个类型的实例的所有类型,必须是满足原型关系的类型链。
原型模型要求一个类型在一个时刻只能有一个原型的疑问.hmtl
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
- <title>原型模型要求一个类型在一个时刻只能有一个原型的疑问</title>
- </head>
- <body>
- <script>
- <!--
- function dwn(s)
- {
- document.write(s + "<br/>");
- }
- //定义Point2D对象
- function Point2D(x,y)
- {
- this.x = x;
- this.y = y;
- }
- Point2D.prototype.x = 0;
- Point2D.prototype.y = 0;
- //定义ColorPoint2D对象
- function ColorPoint2D(x,y,c)
- {
- this.x = x;
- this.y = y;
- }
- //ColorPoint2D以Point2D对象为原型
- ColorPoint2D.prototype = new Point2D(90,90);
- ColorPoint2D.prototype.x = 1;
- ColorPoint2D.prototype.y = 1;
- //构造一个ColorPoint2D对象
- var cp = new ColorPoint2D(10,20,"red");
- dwn(cp.x); //10先查找cp本身的属性
- delete cp.x;
- dwn(cp.x); //1 删除后查找上层原型链上的属性
- delete ColorPoint2D.prototype.x;
- dwn(cp.x); //0删除后继续查找更上层原型链上的属性
- /*
- * ColorPoint2D.prototype = new Point2D(90,90);
- * ColorPoint2D.prototype.x = 1;
- * ColorPoint2D.prototype.y = 1;
- *原型模型要求一个类型在一个时刻只能有一个原型,ColorPoint2D的原型是new Point2D(90,90)对象,还是Object
- */
- -->
- </script>
- </body>
假如考虑到对象是可以动态添加属性的,那么可以不可以认为ColorPoint2D的原型是new Point2D(90,90)对象,这个对象添加了x y两个属性